sql >> Database >  >> RDS >> Oracle

Oracle Entity Framework-provider slaat DateTime niet op.Now met milliseconden

Aha! Mijn geweldige collega had een idee en het werkte!

In onze EF-code hebben we geprobeerd om

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<EntityClass>().Property(p => p.TIMESTAMP).HasPrecision(6);
}

En dan de DateTime.Now met milliseconden opgeslagen in de database

Update - het is de moeite waard om te vermelden hoe ik in deze hachelijke situatie ben beland

De database bouwen met Model First in een "test"-toepassing

  1. Mijn app moet zowel met SQL Server als met Oracle werken. Dus...
  2. Ik begon met het ontwerpen van mijn database in een EDMX-diagram
  3. Toen het diagram klaar was, heb ik de DDL voor SQL Server gegenereerd.
  4. Om de een of andere reden kon de Oracle EF-provider de DDL niet genereren, dus ging ik verder met het handmatig aanbrengen van wijzigingen in de SQL Server DDL, zodat het syntactisch correct zou zijn

    Eerste probleem - mijn Oracle DDL gebruikte een datum in plaats van een tijdstempel. Zorg ervoor dat u Timestamp gebruikt!!! DateTime in Oracle slaat geen milliseconden op.

Code eerst uit de database gebruiken voor de daadwerkelijke oplossing

  1. Ik wilde dat de app de Code First-aanpak zou gebruiken (alleen mijn voorkeur. Ik denk dat het gemakkelijker te onderhouden is)
  2. Dus ik maakte verbinding met de SQL Server-database en genereerde al mijn klassen op basis van dat schema.
  3. Ik kreeg al mijn unit-tests doorstaan ​​en besloot toen om het te testen met de Oracle-database
  4. Zelfs na het veranderen van DATE naar Timestamp, had ik nog steeds problemen met de milliseconden die binnenkwamen.
  5. Ik heb nog een Code First-model gegenereerd in een visuele teststudio-oplossing met een TIMESTAMP(6) typ Oracle, behalve toen ik keek naar de OnModelCreating code, het heeft niets gegenereerd met HasPrecision(6) er waren ook geen decorateurs op het terrein in de gegenereerde C# POCO-klasse.
  6. Ik heb gemerkt dat als je de HasPrecision(6) . hebt code in uw OnModelCreating , de code eerstCreateDatabase() zal daadwerkelijk een Oracle TIMESTAMP(6) . maken . Als u dat niet doet, gebruikt de Oracle EF-provider DATE

Ik denk dat als je de Model First-aanpak volgt, je precisiewaarden kunt instellen in het EDMX-diagram, maar ik heb gehoord dat dit een slechte gewoonte is.



  1. Ongestructureerde inhoud:een onaangeboorde brandstofbron voor AI en machine learning

  2. MySql-proceslijst gevuld met slaapvermeldingen die leiden tot te veel verbindingen?

  3. UnboundLocalError:lokale variabele 'cursor' waarnaar wordt verwezen vóór toewijzing

  4. postgresql des encrypt