Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Scaffolding colocando índices estranhos

Tenho 2 models: Usuario, Processo Usuario.cs é uma classe normal com Nome, Matricula, Email.

Processo.cs tem vários atributos comuns e um atributo chamado Andamento que se destina a armazenar uma série de Andamentos que o processo virá a ter. E outro atributo Encarregados destinado a armazenar uma série de Usuários que se encarregarão do projeto:

public Processo ()
        {
        Encarregados = new List<Usuario>();
            Andamentos = new List<Andamento>();
        }

        [Key]
        public int ProcessoId { get; set; }

    ...outros atributos string e int comuns

        public virtual ICollection<Andamento> Andamentos { get; set; }
    public virtual ICollection<Usuario> Encarregados { get; set; }
    }

Crio os Controllers e Views das duas classes usando o Scaffolding, adiciono a Migration e faço o update-database.

E quando vou olhar no banco de dados a estrutura da tabela Usuarios vejo que foram adicionados dois índices nela:

Processo_ProcessoId Andamento_AndamentoId

Por que?

Por que colocar índices em uma tabela que será usada e não usuará nada?

Um usuário poderá estar com vários processos, de que adianta registrar no registro dele um Id de apenas um Processo, ou um Id de um Andamento? Não faz sentido!!!

Ou isso é processo normal do banco e não devo me incomodar?

4 respostas

Olá, Jaqueline!

Entre a tabela Usuario e a tabela Processo não existe nenhuma tabela de ligação? Você pode postar aqui o script de criação do seu banco de dados?

Script de criação do banco? Mas quem cria o banco é o Package Manager e o recurso Scaffolding usando os models. Não tem Script, ou melhor, o script é criado e executado pelo Entity Framework a partir do que for escrito nos Models. Eu me atenho a trabalhar nos Models. E o EF não cria nenhuma tabela de ligação pelo que eu tenho visto.

Ok Jaqueline, então vou rodar seu código aqui para tentar simular o problema, e te respondo em seguida.

solução!

Obrigado Marcelo, veja esse artigo:

http://www.entityframeworktutorial.net/code-first/configure-one-to-many-relationship-in-code-first.aspx

No curso da Alura nos ensinam a criar a ICollection na classe Possuidora e isto bastaria.

Nesse artigo fala que teriamos de criar um atributo da classe Possuidora na classe Possuida também.

Qual é o certo afinal?