sql >> Database teknologi >  >> RDS >> Oracle

Oracle Entity Framework-udbyder gemmer ikke DateTime.Now med millisekunder

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

  1. Min app skal fungere med både SQL Server og Oracle. Så...
  2. Jeg startede med at designe min database i et EDMX-diagram
  3. Når diagrammet var færdigt, genererede jeg DDL til SQL Server.
  4. 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

  1. Jeg ønskede, at appen skulle bruge Code First-tilgangen (bare min præference. Jeg tror, ​​den er nemmere at vedligeholde)
  2. Så jeg oprettede forbindelse til SQL Server-databasen og genererede alle mine klasser fra det skema.
  3. Jeg bestod alle mine enhedstests og besluttede mig derefter for at teste det med Oracle-databasen
  4. Selv efter ændring fra DATE til tidsstempel, havde jeg stadig problemer med, at millisekunderne gik ind.
  5. 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 med HasPrecision(6) Der var heller ingen dekoratører på ejendommen i den genererede C# POCO-klasse.
  6. Jeg har bemærket, om du har HasPrecision(6) kode i din OnModelCreating , Code FirstCreateDatabase() vil faktisk lave en Oracle TIMESTAMP(6) . Hvis du ikke gør det, vil Oracle EF-udbyderen bruge DATE

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.



  1. MySQL - GROUP BY gør siden langsommere

  2. Postgres Langsom gruppe efter forespørgsel med max

  3. Postgresql - Hvordan udtrækker jeg den første forekomst af en understreng i en streng ved hjælp af et regulært udtryksmønster?

  4. Hvad er fordele og ulemper ved at udføre beregninger i sql vs. i din ansøgning