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));
¿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.
No estoy seguro de una forma fluida, pero simplemente puede establecer la propiedad en un constructor sin parámetros ...
public class MyTable
{
public MyTable()
{
CanSetDefault = true;
}
public bool CanSetDefault {get; set; }
}
Actualizar
Un rápido google sugiere que no es posible usar la aplicación fluida ...
http://social.msdn.microsoft.com/Forums/en-US/ad854e28-02f5-451b-9000-c8bcb1355d0b/codefirst-ctp5-and-default-values?forum=adonetefx
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()";
}
}
}