No EF6, geralmente podemos usar esse caminho para configurar a Entidade.
public class AccountMap : EntityTypeConfiguration<Account>
{
public AccountMap()
{
ToTable("Account");
HasKey(a => a.Id);
Property(a => a.Username).HasMaxLength(50);
Property(a => a.Email).HasMaxLength(255);
Property(a => a.Name).HasMaxLength(255);
}
}
Como podemos fazer no EF Core, desde quando a classe I Herda EntityTypeConfiguration que não consegue encontrar a classe.
Eu faço o download do código-fonte bruto EF Core do GitHub, não consigo encontrá-lo. Alguém pode ajudar nisso?
c#
entity-framework-core
Herman
fonte
fonte
IEntityTypeConfiguration<T>
umvoid Configure()
método com um que você pode implementar. Detalhes aqui: github.com/aspnet/EntityFramework/pull/6989Respostas:
Desde o EF Core 2.0, existe
IEntityTypeConfiguration<TEntity>
. Você pode usá-lo assim:Mais sobre este e outros novos recursos introduzidos na 2.0 podem ser encontrados aqui .
fonte
builder.ApplyConfigurationsFromAssembly(typeof(ApplicationDbContext).Assembly);
aplicar todas as confirmações personalizadasVocê pode conseguir isso através de alguns tipos adicionais simples:
Uso:
fonte
ForSqlServerToTable()
?ToTable
, consulte docs.microsoft.com/en-us/ef/core/modeling/relational/tablesentity.Property(c => c.JoinDate).HasColumnType("date");
OnModelCreating
foi atualizado para exigir aDbModelBuilder
. A maneira de adicionar configurações a isso agora émodelBuilder.Configurations.Add(new UserConfiguration());
No EF7, você substitui OnModelCreating na classe DbContext que está implementando.
fonte
IEntityMapperStrategy
interface com umavoid MapEntity(ModelBuilder, Type)
assinatura ebool IsFor(Type)
. Implemente a interface quantas vezes quiser (para que você possa criar classes que podem mapear mais de uma entidade, se desejar) e, em seguida, criar outra classe (um provedor de estratégia) que injeteIEnumerable
tudo issoIEntityMapperStrategies
. Veja aqui em 'Tipos especiais'. Injete isso no seu contexto.Isso está usando a versão mais recente atual, beta 8. Tente o seguinte:
Em seguida, no seu DbContext:
fonte
Você pode usar a reflexão para fazer as coisas de maneira muito semelhante à maneira como elas funcionam no EF6, com uma classe de mapeamento separada para cada entidade. Isso funciona na RC1 final:
Primeiro, crie uma interface para seus tipos de mapeamento:
Em seguida, crie uma classe de mapeamento para cada uma de suas entidades, por exemplo, para uma
Person
classe:Agora, a reflexão é mágica
OnModelCreating
na suaDbContext
implementação:fonte
DataContext
e.Where
usa? Eu fiz um projeto separado para isso e não parece encontrar a referência..Where
éSystem.Linq
,DataContext
é a classe em que é adicionado o código (minha EFDbContext
impl)Desde o EF Core 2.2, você pode adicionar todas as configurações (classes, que implementaram a interface IEntityTypeConfiguration) em uma linha no método OnModelCreating na classe, herdada da classe DbContext
E, como mencionado na resposta anterior, desde o EF Core 2.0, você pode implementar a interface IEntityTypeConfiguration, configurar a configuração de mapeamento usando o FluentAPI no método Configure.
fonte
É isso que estou fazendo em um projeto no qual estou trabalhando atualmente.
Uso:
No método OnModelCreating do seu contexto:
Exemplo de classe de mapeamento:
Outra coisa que gosto de fazer para aproveitar o comportamento de dobramento do Visual Studio 2015 é para uma Entidade chamada 'Usuário', você nomeia seu arquivo de mapeamento como 'User.Mapping.cs', o Visual Studio dobrará o arquivo no explorador de soluções para que ele esteja contido no arquivo de classe da entidade.
fonte
Configure(builder)
não existia em 2016? Com uma ligeira mudança de fiação para apontar para TypeConfiguration, não há necessidade da interface 'extra'.Eu terminei com esta solução:
Uso da amostra:
e
fonte
Basta implementar o IEntityTypeConfiguration
e adicione-o à sua entidade
fonte
No ef core, temos de impulsionar o IEntityTypeConfiguration em vez do EntityTypeConfiguration. Nesse caso, temos acesso total ao DbContext modelBuilder e podemos usar API fluente, mas, no núcleo, essa API é um pouco diferente das versões anteriores. você pode encontrar mais detalhes sobre a configuração do modelo principal ef em
https://www.learnentityframeworkcore.com/configuration/fluent-api
fonte
No Entity Framework Core 2.0:
Peguei a resposta de Cocowalla e a adaptei para a v2.0:
E é usado no DbContext assim:
E é assim que você cria uma configuração de tipo de entidade para uma entidade:
fonte
Late bound operations cannot be performed on types or methods for which ContainsGenericParameters is true.
class EntityTypeConfigurationBase<TEntity> : IEntityTypeConfiguration<TEntity>
). Você não pode criar uma instância dessa classe base.Estou certo?
Eu posso passar a configuração:
fonte
Eu segui uma abordagem semelhante à maneira como a Microsoft implementou o ForSqlServerToTable
usando o método de extensão ...
o sinalizador parcial é necessário se você deseja usar o mesmo nome de classe em vários arquivos
Em seguida, no DataContext OnModelCreating, faça sua chamada para cada ramal ...
Desta forma, estamos seguindo o mesmo padrão usado pelos outros métodos do construtor.
O que você acha?
fonte
Bem, aqui está o problema do aprimoramento no repo do EF7 Github: https://github.com/aspnet/EntityFramework/issues/2805
Você pode rastrear o problema diretamente lá, apesar de ainda estar em lista de pendências sem prioridade designada.
fonte
Eu tenho um projeto que permite configurar entidades fora do
DbContext.OnModelCreating
Você configura cada entidade em uma classe separada que herda deStaticDotNet.EntityFrameworkCore.ModelConfiguration.EntityTypeConfiguration
Primeiro, você precisa criar uma classe que herda de
StaticDotNet.EntityFrameworkCore.ModelConfiguration.EntityTypeConfiguration<TEntity>
ondeTEntity
está a classe que deseja configurar.Em sua classe Startup, você só precisa informar ao Entity Framework onde encontrar todas as suas classes de configuração quando estiver configurando seu DbContext.
Há também uma opção para adicionar configurações de tipo usando um provedor. O repositório possui documentação completa sobre como usá-lo.
https://github.com/john-t-white/StaticDotNet.EntityFrameworkCore.ModelConfiguration
fonte