Como especificar o nome da tabela com a API Entity Framework Code First Fluent
Eu tenho uma entidade e devo configurar o Entity Framework para mapeá-la para uma tabela de banco de dados com nome diferente.
Posso fazer isso facilmente com Code First DataAnnotations ( DataAnnotations.Schema.TableAttribute ).
Mas, devido a limitações, agora tenho que usar a API Code First Fluent (meus objetos de domínio serão usados ​​por clientes externos, então eles não devem ser específicos de tecnologia - por exemplo, ter qualquer referência a DataAnnotations)
Eu pesquisei no MSDN, mas não encontrei nada. Então, é possível e como?
— bairog
Em geral, você deve criar DTOs (objetos de transferência de dados) e mapear seus objetos EF para eles; nunca deve usar as classes EF diretamente, a menos que esteja trabalhando em um aplicativo pequeno / trivial.
Você usará o .ToTable()método:
Fonte: MSDN: http://msdn.microsoft.com/en-us/data/jj591617.aspx
— Martin Cron
eu prefiro isso porque eu quero todas as anotações em um só lugar
— rajeemcariazo
existe alguma validação de que a tabela existe? renomeamos uma tabela e nada quebrou, é esse o comportamento que você esperava? obviamente não pode fazer CRUD na tabela renomeada, mas não parece quebrar nada ...
— AZ Chad
Você também pode usar a anotação Tabela:
Consulte: Anotações de dados do código inicial
Thx, mas se você ler atentamente minha pergunta - você verá aquele apptoach diretamente no meio dela :)
Mesmo que a anotação seja chamada de "Tabela", ela parece funcionar bem para visualizações e também para tabelas.
@JonSchneider Estou apenas discutindo definições aqui sem nenhuma razão em particular, mas uma visão é uma tabela somente leitura.
A anotação da Tabela reside em System.ComponentModel.DataAnnotations.Schema ;.
Como isso obteve mais votos positivos, a pergunta claramente pede a versão API fluente
— Worthy7,
Use o método ToTable:
— alexmac
Acho que dividir seus mapeamentos em classes é a abordagem mais limpa.
Mas então, em seu OnModelCreatingmétodo, você tem que fazer: modelBuilder.Configurations.Add(new MyEntityMap());onde, em vez de apenas adicionar um modelBuilder.Entity<MyEntity>().ToTable("MyEntityTable");, não, essa não é a maneira mais limpa, a menos que você também tenha outro mapeamento para fazer para essa entidade.