Wie kann ich den Standardwert mit EntityFramework Code First FluentAPI für bool Eigenschaft festlegen?EntityFramework Code Erste FluentAPI DefaultValue in EF6.X
Etwas wie:
Property(l => l.PropertyFlag).HasColumnType("bit").DefaultValue(1);
Wie kann ich den Standardwert mit EntityFramework Code First FluentAPI für bool Eigenschaft festlegen?EntityFramework Code Erste FluentAPI DefaultValue in EF6.X
Etwas wie:
Property(l => l.PropertyFlag).HasColumnType("bit").DefaultValue(1);
Ich bin über eine fließend Art und Weise nicht sicher, aber Sie können einfach die Eigenschaft in einem parameterlosen Konstruktor gesetzt ...
public class MyTable
{
public MyTable()
{
CanSetDefault = true;
}
public bool CanSetDefault {get; set; }
}
aktualisieren
Ein schneller Google schlägt vor, dass es nicht möglich ist, die fließende ...
http://social.msdn.microsoft.com/Forums/en-US/ad854e28-02f5-451b-9000-c8bcb1355d0b/codefirst-ctp5-and-default-values?forum=adonetefx
Guter Vorschlag, funktioniert aber nicht für DateTime.Now, das für CreatedOn-Felder verwendet wird, da die Uhr vom Zeitpunkt der Erstellung der Klasseninstanz bis zum Einfügen der Uhr driften wird. Dies würde zu einem schwer zu debuggenden Code führen, der auf Audit-Protokollen basiert. –
Dies wird jetzt für EF7 bearbeitet und ist in der Vorabversion https://data.uservoice.com/forums/72025-entity-framework-feature-suggestions/suggestions/2929682-support-database-default-values-in verfügbar -code-first –
Dies funktioniert nur für Einträge, die damit verbunden sind. Wenn Sie bereits Einträge haben und Ihrem Schema eine Spalte hinzufügen, funktioniert dies nicht. – Warrick
Da EF nicht die Funktionen, die ich brauche, wie Standardwerte und eindeutige Schlüssel als Fremdschlüssel benötigen, müssen wir das ORM von EF in NHibernate ändern. Es scheint mir, dass NHibernate mehr Funktionen als EF 6.X hat.
Gute Nachrichten, Code zuerst unterstützt dies jetzt. In der "Up()" Methode der erzeugten Migration, geben Sie einen Standard mit folgenden Syntax:
AddColumn("[table name]", "[column name]", c => c.Boolean(nullable: false, defaultValue: false));
Link zu mehr Informationen? – joelmdev
@joelmdev Ein Link zur MSDN-Dokumentation hinzugefügt – htxryan
Dies ist nur eine Up-Migration. Das OP fragt nach den Standardeinstellungen zum Zeitpunkt des Einfügens. Hinter den Kulissen ordnet EF jede Eigenschaft in der POCO in die Insert-Anweisung als NULL zu, wenn die C# -Eigenschaft null ist. Bei Werttypen wird der Standardwert des Werttyps eingefügt. Nützliche Informationen, obwohl! –
Eine weitere Option sein hier die Standard SqlServerMigrationSqlGenerator Klasse mit Ihrem eigenen außer Kraft zu setzen. Sie können dann bestimmte Dinge einfügen, die in der Generate-Methode vorkommen sollen (z. B. Standardwerte). Das Schöne dabei ist, dass Sie dies auch in anderen Anwendungen verwenden können, da es ziemlich generisch ist. Here ist eine gute Erklärung dafür.
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()";
}
}
}
Vollständige Erklärung: https://andy.mehalick.com/2014/02/06/ef6-adding-a-created-datetime-column-automatisch-with-code-first-migrations/ – jwatts1980
möglich Duplikat von [Wie einen Standardwert Einschränkung mit Entity Framework 6-Code zuerst? Einstellen] (http://stackoverflow.com/questions/20136504/how-can-set-a-default-value- constraint-with-entity-framework-6-code-first) – Colin
Es sollte eine Lösung für dieses Problem geben, nicht nur ein einfaches "Nein". Ich spreche alle möglichen Lösungen. –
Entschuldigung, das hatte ich nicht bemerkt. Ich dachte, Sie suchten nach dem Festlegen des Vorschlagswerts mit EntityFramework Code First FluentAPI für Bool-Eigenschaft. Wie dumm von mir ;-) – Colin