Wie kann ich den Standardwert mithilfe von EntityFramework Code First FluentAPI für die Eigenschaft bool festlegen?
So etwas wie:
Property(l => l.PropertyFlag).HasColumnType("bit").DefaultValue(1);
Gute Nachrichten, Code zuerst unterstützt dies jetzt. Geben Sie in der Methode "Up ()" der generierten Migration einen Standard mit der folgenden Syntax an:
AddColumn("[table name]", "[column name]", c => c.Boolean(nullable: false, defaultValue: false));
Ich bin nicht sicher, was einen fließenden Weg bedeutet, aber Sie können die Eigenschaft einfach in einem parameterlosen Konstruktor festlegen ...
public class MyTable
{
public MyTable()
{
CanSetDefault = true;
}
public bool CanSetDefault {get; set; }
}
Update
Ein schneller Google-Hinweis deutet darauf hin, dass es nicht möglich ist, die fließende ...
http://social.msdn.Microsoft.com/Forums/en-US/ad854e28-02f5-451b-9000-c8bcb1355d0b/codefirst-ctp5-und-default-values?forum=adonetefx
Eine andere Option hier ist, die Standardklasse SqlServerMigrationSqlGenerator mit Ihrer eigenen zu überschreiben. Sie können dann bestimmte Dinge, die Sie in der Generate-Methode ausführen möchten, einfügen (z. B. Standardwerte). Das Schöne daran ist, dass Sie dies auch in anderen Anwendungen verwenden können, da es ziemlich generisch ist. Hier ist eine gute Erklärung dazu.
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()";
}
}
}
Da EF nicht die Funktionen hat, die ich brauche, wie Standardwerte und eindeutige Schlüssel als Fremdschlüssel, müssen wir den ORM von EF in NHibernate ändern. Es scheint mir, dass NHibernate mehr Funktionen als EF 6.X hat.
Siehe Beispiel unten
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; }
}