one many framework first existing example dbmodelbuilder code c# entity-framework ef-code-first ef-fluent-api

c# - many - fluent api entity framework core



EntityFramework Code First FluentAPI DefaultValue en EF6.X (4)

Buenas noticias, el código primero ahora lo admite. En el método "Up ()" de la migración generada, especifique un valor predeterminado con la siguiente sintaxis:

AddColumn("[table name]", "[column name]", c => c.Boolean(nullable: false, defaultValue: false));

MSDN para el método "AddColumn"

¿Cómo puedo establecer el valor predeterminado usando EntityFramework Code First FluentAPI para la propiedad bool?

Algo como:

Property(l => l.PropertyFlag).HasColumnType("bit").DefaultValue(1);


Como EF no tiene las funciones que necesito, como los valores predeterminados y la clave única como claves externas, tenemos que cambiar el ORM de EF a NHibernate. Me parece que NHibernate tiene más funciones que EF 6.X.



Otra opción aquí es anular la clase SqlServerMigrationSqlGenerator predeterminada con la suya. Luego puede inyectar ciertas cosas que quiera que ocurran en el método Generar (por ejemplo, valores predeterminados). Lo bueno de esto es que también puede usarlo en otras aplicaciones, ya que es bastante genérico. Here hay una buena explicación al respecto.

internal class CustomSqlServerMigrationSqlGenerator : SqlServerMigrationSqlGenerator { protected override void Generate(AddColumnOperation addColumnOperation) { SetCreatedUtcColumn(addColumnOperation.Column); base.Generate(addColumnOperation); } protected override void Generate(CreateTableOperation createTableOperation) { SetCreatedUtcColumn(createTableOperation.Columns); base.Generate(createTableOperation); } private static void SetCreatedUtcColumn(IEnumerable<ColumnModel> columns) { foreach (var columnModel in columns) { SetCreatedUtcColumn(columnModel); } } private static void SetCreatedUtcColumn(PropertyModel column) { if (column.Name == "CreatedUtc") { column.DefaultValueSql = "GETUTCDATE()"; } } }