Manchmal bei der Verwendung von Entity Framework Code Zuerst erstellen die Standardkonventionen nicht den gewünschten Datenbanktyp. Zum Beispiel erstellt eine Eigenschaft vom Typ System.DateTime
standardmäßig eine Datenbankspalte vom Typ DateTime
. Was ist zu tun, wenn Sie möchten, dass ein Typ datetime2
(der Typ DateTime
, der keine Probleme mit Zeitzonen und Sommerzeit hat) hat?Entity Framework Code Zuerst: Welches DataType-Attribut für DateTime2?
Es ist möglich, den gewünschten Datenbanktyp mit Datenanmerkungen unter Verwendung einer DataTypeAtrribute
anzugeben. Einer der Konstruktoren von DataTypeAttribute akzeptiert einen Parameter DataType Enumeration. So könnte man angeben, so etwas wie:
[DataType(DataType.DateTime)]
public DateTime DateOfBirth {get; set;}
Der Datatype Aufzählungstyp eine Menge Typen enthält, jedoch wird es einen Wert für DateTime2
fehlt.
Ein anderer Ansatz wäre die Verwendung von Fluent API. Erstellen Sie ein DateTime2
in Methode DBContext.OnModelCreating:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>().Property(p => p.BirthDate)
.HasColumnType("datetime2");
}
Die Datatype eine second constructor that accepts a string hat. Diese Zeichenfolge ist definiert als
Der Name der benutzerdefinierten Feldvorlage, die dem Datenfeld zugeordnet werden soll.
So würde man annehmen, dass die folgende genug sein würde, eine datetime2 zu erstellen:
[DataType("datetime2")]
public DateTime DateOfBirth {get; set;}
Ach, das funktioniert nicht. Die erstellte Spalte hat immer noch das Format DateTime
.
Frage: Welche Zeichenfolge im Konstruktor verwenden, um eine Datetime2 zu erstellen?