2016-05-04 10 views
3

Ich habe einen Wert-Code zuerst in Entity Framework gesetzt Spalte eingeben datetime2 in SQL Server

DateTime dt = DateTime.Parse("2015-10-12 14:24:40.582"); 

damit ich tun:

SomeEntity someEntity = new SomeEntity() 
{ 
    ID = 1, 
    ChangedOn = dt 
}; 
context.SomeEntities.Add(someEntity); 

Was ich herausgefunden habe: in Datenbanktabelle der Wert gespeichert ist "2015.10.12 14: 24: 40.58 0000"

I manuell mit

herausgefunden
SELECT CONVERT(datetime2, ChangedOn) FROM SomeEnititiesTable WHERE ID=1; 

Ich lade someEntity aus der Datenbank und tun

bool ok = someEntity.ChangedOn.Equals(dt); 

Das Problem ist, dass, wenn ich ok == falseok == true erwarten. : |

Wie wird Code zuerst in Entity Framework generiert Spalte des Typs datetime2 anstelle von Datetime in Migrationen?

Antwort

2

Wie Code zuerst in Entity Framework erzeugen Spalte vom Typ datetime2 statt datetime in Migrationen machen?

Um den Typen der Spalte angeben, die Sie verwenden können, das folgende Attribut auf die Eigenschaft ChangedOn des Modells hinzu:

[Column(TypeName = "datetime2")] 

Oder wenn Sie den Fluent API verwenden, dann können Sie dies in der Ihr OnModelCreating Ihres DBContext:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 

    // ... 

    modelBuilder.Entity<someEntity>() 
     .Property(p => p.ChangedOn) 
     .HasColumnType("datetime2"); 

    // ... 
} 
+1

ty. gute Antwort. – Willmore

0

SOLUTION (Umgehung)

1) ein Feld ChangedOn2 mit der Art der langen hinzufügen.

2) Speichern dt.Ticks Wert zu ChangedOn2.

3) Vergleichen Sie mit

someEntity.ChangedOn2.Equals(dt.Ticks);