En EF6 usualmente podemos usar esta forma para configurar la Entidad.
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);
}
}
Cómo podemos hacerlo en EF Core, desde cuando la clase I Hereda EntityTypeConfiguration que no puede encontrar la clase.
Descargo el código fuente bruto de EF Core desde GitHub, no puedo encontrarlo. ¿Alguien puede ayudar en esto?
c#
entity-framework-core
Germán
fuente
fuente
IEntityTypeConfiguration<T>
con unvoid Configure()
método que se puede implementar. Detalles aquí: github.com/aspnet/EntityFramework/pull/6989Respuestas:
Desde EF Core 2.0 existe
IEntityTypeConfiguration<TEntity>
. Puedes usarlo así:Puede encontrar más sobre esta y otras nuevas características introducidas en 2.0 aquí .
fuente
builder.ApplyConfigurationsFromAssembly(typeof(ApplicationDbContext).Assembly);
tiene que aplicar todas lasPuede lograr esto a través de algunos tipos adicionales simples:
Uso:
fuente
ForSqlServerToTable()
?ToTable
, ver docs.microsoft.com/en-us/ef/core/modeling/relational/tablesentity.Property(c => c.JoinDate).HasColumnType("date");
OnModelCreating
ha sido actualizado para requerir aDbModelBuilder
. La forma de agregar configuraciones a esto es ahoramodelBuilder.Configurations.Add(new UserConfiguration());
En EF7, anula OnModelCreating en la clase DbContext que está implementando.
fuente
IEntityMapperStrategy
interfaz con unavoid MapEntity(ModelBuilder, Type)
firma ybool IsFor(Type)
. Implemente la interfaz tantas o tan pocas veces como desee (para que pueda crear clases que puedan mapear más de una entidad si lo desea) y luego cree otra clase (un proveedor de estrategia) que inyecte unaIEnumerable
de todas lasIEntityMapperStrategies
. Ver aquí en 'Tipos especiales'. Inyecte eso en su contexto.Esto está usando la última versión actual, beta 8. Pruebe esto:
Luego, en su DbContext:
fuente
Puede usar la reflexión para hacer cosas de manera muy similar a cómo funcionan en EF6, con una clase de mapeo separada para cada entidad. Esto funciona en RC1 final:
Primero, cree una interfaz para sus tipos de mapeo:
Luego cree una clase de mapeo para cada una de sus entidades, por ejemplo, para una
Person
clase:Ahora, el reflejo mágico
OnModelCreating
en suDbContext
implementación:fuente
DataContext
y.Where
? Hice un proyecto separado para esto y no parece encontrar la referencia..Where
esSystem.Linq
,DataContext
es la clase donde se agrega el código (mi EFDbContext
impl)Desde EF Core 2.2 puede agregar todas las configuraciones (clases, que implementaron la interfaz IEntityTypeConfiguration) en una línea en el método OnModelCreating en clase, que se hereda de la clase DbContext
Y, como se mencionó en la respuesta anterior, desde EF Core 2.0, puede implementar la interfaz IEntityTypeConfiguration, configurar la configuración de mapeo utilizando FluentAPI en el método Configure.
fuente
Esto es lo que estoy haciendo en un proyecto en el que estoy trabajando actualmente.
Uso:
En el método OnModelCreating de su contexto:
Ejemplo de clase de mapeo:
Otra cosa que me gusta hacer para aprovechar el comportamiento de plegado de Visual Studio 2015 es para una Entidad llamada 'Usuario', usted nombra su archivo de mapeo 'User.Mapping.cs', Visual Studio doblará el archivo en el explorador de soluciones para que esté contenido en el archivo de clase de entidad.
fuente
Configure(builder)
no existí en 2016? Con un ligero cambio de cableado para apuntar a TypeConfiguration, no hay necesidad de una interfaz 'extra'.Terminé con esta solución:
Uso de muestra:
y
fuente
Simplemente implemente IEntityTypeConfiguration
y luego agréguelo a su entidad Contexto
fuente
En ef core tenemos que implementar IEntityTypeConfiguration en lugar de EntityTypeConfiguration, en este caso tenemos acceso completo a DbContext modelBuilder y podemos usar una API fluida, pero en ef core esta API es un poco diferente de las versiones anteriores. puede encontrar más detalles sobre la configuración del modelo ef core en
https://www.learnentityframeworkcore.com/configuration/fluent-api
fuente
En Entity Framework Core 2.0:
Tomé la respuesta de Cocowalla y la adapté para v2.0:
Y se usa en el DbContext así:
Y así es como se crea una configuración de tipo de entidad para una entidad:
fuente
Late bound operations cannot be performed on types or methods for which ContainsGenericParameters is true.
class EntityTypeConfigurationBase<TEntity> : IEntityTypeConfiguration<TEntity>
). No puede hacer una instancia de esta clase base.Estoy en lo cierto?
Puedo pasar config:
fuente
Seguí un enfoque similar a la forma en que Microsoft implementó ForSqlServerToTable
utilizando el método de extensión ...
el indicador parcial es obligatorio si desea usar el mismo nombre de clase en varios archivos
Luego, en DataContext OnModelCreating, haga su llamada para cada extensión ...
De esta manera, seguimos el mismo patrón utilizado por los otros métodos de construcción.
¿Qué piensas?
fuente
Bueno, aquí está el problema para la mejora en el repositorio de EF7 Github: https://github.com/aspnet/EntityFramework/issues/2805
Puede rastrear el problema directamente allí, aunque todavía está solo en la cartera sin prioridad designada.
fuente
Tengo un proyecto que le permite configurar entidades fuera de
DbContext.OnModelCreating
Usted configura cada entidad en una clase separada que hereda deStaticDotNet.EntityFrameworkCore.ModelConfiguration.EntityTypeConfiguration
Primero debe crear una clase que herede de
StaticDotNet.EntityFrameworkCore.ModelConfiguration.EntityTypeConfiguration<TEntity>
dóndeTEntity
es la clase que desea configurar.Luego, en su clase de inicio, solo necesita decirle a Entity Framework dónde encontrar todas sus clases de configuración cuando configura su DbContext.
También hay una opción para agregar configuraciones de tipo usando un proveedor. El repositorio tiene documentación completa sobre cómo usarlo.
https://github.com/john-t-white/StaticDotNet.EntityFrameworkCore.ModelConfiguration
fuente