9

Abbiamo un progetto Entity Framework 5.0 con migrazioni code-first con SQL Server 2008 ma tutte le proprietà di data sono state create nel database come datetime colonne - non datetime2.Come passare a datetime2 nel progetto Enitity Framework/SQL Server 2008

È possibile creare la migrazione utilizzando add-migration che aggiornerà tutte le colonne datetime nel database? C'è un altro modo semplice per passare a datetime2 ovunque?

+0

Possibile duplicato di [Force Entity Framework 5 per utilizzare il tipo di dati datetime2] (https://stackoverflow.com/questions/15248488/force-entity-framework-5-to-use-datetime2-data-type) – hazzik

risposta

8

È possibile utilizzare l'API fluente per forzare la creazione di colonne datetime2 nel DB.

ho trovato questo:

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

si dovrebbe essere in grado di ottenere l'idea.

Oppure, se è necessario attenersi al DB esistente, è possibile creare una migrazione che esegua codice T-SQL personalizzato. C'è un esempio qui:

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

+0

grazie Floremin. Posso davvero creare la migrazione con SQL personalizzato. C'è un modo per automatizzare l'interruttore? C'è un modo per dire al codice prima di usare datetime2 per qualsiasi nuova proprietà Date in futuro? – mykola

+0

Penso che il primo link spieghi esattamente questo. Fluent API è il modo per personalizzare il comportamento predefinito del codice. – Floremin

23

questo è un vecchio post, ma se si desidera passare TUTTE le colonne datetime a datetime2, e utilizzare datetime2 per eventuali nuove colonne aggiunte (in altre parole, fanno EF utilizzare datetime2 per impostazione predefinita), è possibile aggiungere questo al metodo OnModelCreating sul contesto:

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

che ottenere tutte le DateTime e DateTime? proprietà su tutte le entità nel modello.

+0

Ottima soluzione! – arche89

+0

IIRC è solo EF6. –

+0

Sì, questo è solo EF6, sebbene possa funzionare anche su EF5 (se stai usando EF5, upgrade a 6!) EF7/EF Core hanno un'implementazione significativamente diversa da EF6, e non ricordo se EF4/EF5 supporta questo o no. –

Problemi correlati