Comment définir la valeur par défaut avec la propriété EntityFramework Code First FluentAPI for bool?
Quelque chose comme:
Property(l => l.PropertyFlag).HasColumnType("bit").DefaultValue(1);
Bonne nouvelle, le code en premier supporte maintenant cela. Dans la méthode "Up ()" de la migration générée, spécifiez une valeur par défaut avec la syntaxe suivante:
AddColumn("[table name]", "[column name]", c => c.Boolean(nullable: false, defaultValue: false));
Je ne suis pas sûr de pouvoir parler couramment, mais vous pouvez simplement définir la propriété dans un constructeur sans paramètre ...
public class MyTable
{
public MyTable()
{
CanSetDefault = true;
}
public bool CanSetDefault {get; set; }
}
Mettre à jour
Un rapide google suggère qu'il n'est pas possible d'utiliser une api fluide ...
http://social.msdn.Microsoft.com/Forums/en-US/ad854e28-02f5-451b-9000-c8bcb1355d0b/codefirst-ctp5-and-default-values?forum=adonetefx
Une autre option consiste à remplacer la classe par défaut SqlServerMigrationSqlGenerator par la vôtre. Vous pouvez ensuite injecter certains éléments souhaités dans la méthode Generate (par exemple, les valeurs par défaut). Ce qui est bien avec cela, c'est que vous pouvez également l'utiliser dans d'autres applications, car c'est assez générique. Ici est une bonne explication à ce sujet.
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()";
}
}
}
Comme EF ne possède pas les fonctions dont j'ai besoin, telles que les valeurs par défaut et la clé unique en tant que clé étrangère, nous devons modifier l'ORM de EF à NHibernate. Il me semble que NHibernate a plus de fonctions que EF 6.X.
Voir exemple ci-dessous
class MyContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Rating)
.HasDefaultValue(3);
}
}
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public int Rating { get; set; }
}