¿Cómo configuramos las convenciones en Entity Framework 7?

ef-code-first entity-framework entity-framework-core

Pregunta

Antes de EF7 usé el snipet de abajo para eliminar las convenciones:

protected override void OnModelCreating(DbModelBuilder builder)
{
      builder.Conventions.Remove<NavigationPropertyNameForeignKeyDiscoveryConvention>();
      builder.Conventions.Remove<PrimaryKeyNameForeignKeyDiscoveryConvention>();
      builder.Conventions.Remove<PluralizingTableNameConvention>();
      builder.Conventions.Remove<PrimaryKeyNameForeignKeyDiscoveryConvention>();
      builder.Conventions.Remove<TypeNameForeignKeyDiscoveryConvention>();
}

¿Cómo logramos el mismo resultado en Entity Framework 7?

Respuesta aceptada

La API para convenciones no es actualmente estable. Consulte https://github.com/aspnet/EntityFramework/issues/2589 .

Se puede hacer, pero requiere el uso de la inyección de dependencia para anular el funcionamiento interno de cómo se llama a OnModelCreating en su contexto. DbContext utiliza la inyección de dependencia para encontrar una instancia de ModelSource que proporciona el generador de modelos (y las convenciones).

Para anular la fuente del modelo, agregue su propia implementación en la inyección de dependencia:

    var serviceCollection = new ServiceCollection();
    serviceCollection
        .AddEntityFramework()
        .AddSqlServer();
    serviceCollection.AddSingleton<SqlServerModelSource, MyModelSource>();
    var serviceProvider = serviceCollection.BuildServiceProvider();

    using(var context = new MyContext(serviceProvider))
    {
        // ...
    }

Su implementación de MyModelSource debería reemplazar a ModelSource.CreateConventionSet() . Vea la fuente original aquí




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué