A ha! Min fantastiska kollega fick en idé och den fungerade!
I vår EF-kod försökte vi sätta
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<EntityClass>().Property(p => p.TIMESTAMP).HasPrecision(6);
}
Och sedan DateTime.Now
med millisekunder lagrades i databasen
Uppdatering – det är värt att nämna hur jag hamnade i den här situationen
Bygga databasen med Model First i en "test"-applikation
- Min app måste fungera med både SQL Server och Oracle. Så...
- Jag började med att designa min databas i ett EDMX-diagram
- När diagrammet var klart genererade jag DDL för SQL Server.
-
Av någon anledning kunde Oracle EF-leverantören inte generera DDL så jag fortsatte att manuellt göra ändringar i SQL Server DDL så att det skulle vara korrekt syntaktisk
Första problemet - min Oracle DDL använde ett datum istället för en tidsstämpel. Se till att du använder Timestamp!!! DateTime i Oracle lagrar inte millisekunder.
Använda kod först från databasen för den faktiska lösningen
- Jag ville att appen skulle använda metoden Code First (bara vad jag föredrar. Jag tror att det är lättare att underhålla)
- Så jag kopplade till SQL Server-databasen och genererade alla mina klasser från det schemat.
- Jag klarade alla mina enhetstester och bestämde mig sedan för att testa det med Oracle-databasen
- Även efter att jag bytte från DATE till Timestamp hade jag fortfarande problem med att millisekunderna gick in.
- Jag genererade en annan Code First-modell i en testlösning för visuell studio med en
TIMESTAMP(6)
skriv i Oracle, förutom när jag tittade påOnModelCreating
kod genererade den inget medHasPrecision(6)
Det fanns inte heller några dekoratörer på fastigheten i den genererade C# POCO-klassen. - Jag har märkt om du har
HasPrecision(6)
kod i dinOnModelCreating
, Code FirstCreateDatabase()
kommer faktiskt att göra en OracleTIMESTAMP(6)
. Om du inte gör det kommer Oracle EF-leverantören att användaDATE
Jag tror att om du använder Model First-metoden kan du ställa in precisionsvärden i EDMX-diagrammet, men jag har hört att det är dålig praxis.