9

Wir haben ein Entity Framework 5.0-Projekt mit Code-First-Migrationen mit SQL Server 2008, aber alle Datumseigenschaften wurden in der Datenbank als datetime Spalten erstellt - nicht datetime2.Wechseln zu datetime2 in Enitity Framework/SQL Server 2008 Projekt

Ist es möglich, eine Migration mit add-migration zu erstellen, die alle datetime Spalten in der Datenbank aktualisiert? Gibt es einen anderen einfachen Weg, überall auf datetime2 zu wechseln?

+0

Mögliches Duplikat von [Force Entity Framework 5 zur Verwendung des Datentyps datetime2] (https://stackoverflow.com/questions/15248488/force-entity-framework-5-to-use-datetime2-data-type) – hazzik

Antwort

8

Sie können eine fließende API verwenden, um das Erstellen von datetime2 Spalten in DB zu erzwingen.

fand ich dies:

Using DateTime properties in Code-First Entity Framework and SQL Server

Sie sollten in der Lage sein, die Idee zu bekommen.

Oder, wenn Sie bei der vorhandenen DB bleiben müssen, dann sollten Sie in der Lage sein, eine Migration zu erstellen, die benutzerdefinierten T-SQL-Code ausführt. Es gibt ein Beispiel hier:

http://msdn.microsoft.com/en-us/data/jj591621.aspx

+0

danke Floremin. Ich kann tatsächlich Migration mit benutzerdefiniertem SQL erstellen. Gibt es eine Möglichkeit, den Switch zu automatisieren? Gibt es eine Möglichkeit, dem Code mitzuteilen, dass in der Zukunft datetime2 für eine neue Date-Eigenschaft verwendet wird? – mykola

+0

Ich denke der erste Link erklärt genau das. Die fließende API ist die Möglichkeit, das Verhalten des Standard-Code-First anzupassen. – Floremin

23

Dies ist eine alte Post, aber wenn Sie alle Ihre Datetime-Spalten datetime2 wechseln möchten, und verwenden Sie datetime2 für neue Spalten (mit anderen Worten hinzufügen, stellen EF verwenden datetime2 Standardeinstellung), können Sie dies mit der OnModelCreating Methode auf Ihrem Kontext hinzufügen:

modelBuilder.Properties<DateTime>().Configure(c => c.HasColumnType("datetime2")); 

, dass all Datetime und Datetime bekommen? Eigenschaften für alle Entitäten in Ihrem Modell.

+0

Große Lösung! – arche89

+0

IIRC Dies ist nur EF6. –

+0

Ja, das ist nur EF6, obwohl es auch auf EF5 funktioniert (wenn Sie EF5 verwenden, auf 6 upgraden!) EF7/EF Core haben eine deutlich andere Implementierung als EF6, und ich erinnere mich nicht, wenn EF4/EF5 unterstützt dies oder nicht. –