Aha! Min fantastiske kollega havde en idé, og den virkede!
I vores EF-kode forsøgte vi at sætte
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<EntityClass>().Property(p => p.TIMESTAMP).HasPrecision(6);
}
Og derefter DateTime.Now
med millisekunder blev gemt i databasen
Opdatering - det er værd at nævne, hvordan jeg kom i denne knibe
Opbygning af databasen med Model First i en "test"-applikation
- Min app skal fungere med både SQL Server og Oracle. Så...
- Jeg startede med at designe min database i et EDMX-diagram
- Når diagrammet var færdigt, genererede jeg DDL til SQL Server.
-
Af en eller anden grund kunne Oracle EF-udbyderen ikke generere DDL'en, så jeg fortsatte med manuelt at foretage ændringer til SQL Server DDL'en, så den ville være korrekt syntaktisk
Første problem - min Oracle DDL brugte en dato i stedet for tidsstempel. Sørg for at bruge tidsstempel!!! DateTime i Oracle gemmer ikke millisekunder.
Brug Code First fra Database til den faktiske løsning
- Jeg ønskede, at appen skulle bruge Code First-tilgangen (bare min præference. Jeg tror, den er nemmere at vedligeholde)
- Så jeg oprettede forbindelse til SQL Server-databasen og genererede alle mine klasser fra det skema.
- Jeg bestod alle mine enhedstests og besluttede mig derefter for at teste det med Oracle-databasen
- Selv efter ændring fra DATE til tidsstempel, havde jeg stadig problemer med, at millisekunderne gik ind.
- Jeg genererede en anden Code First-model i en testløsning med visual studio med en
TIMESTAMP(6)
skriv i Oracle, undtagen når jeg så påOnModelCreating
kode, genererede den ikke noget medHasPrecision(6)
Der var heller ingen dekoratører på ejendommen i den genererede C# POCO-klasse. - Jeg har bemærket, om du har
HasPrecision(6)
kode i dinOnModelCreating
, Code FirstCreateDatabase()
vil faktisk lave en OracleTIMESTAMP(6)
. Hvis du ikke gør det, vil Oracle EF-udbyderen brugeDATE
Jeg tror, at hvis du bruger Model First-tilgangen, kan du indstille præcisionsværdier i EDMX-diagrammet, men jeg har hørt, at det er dårlig praksis.