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
- Mijn app moet zowel met SQL Server als met Oracle werken. Dus...
- Ik begon met het ontwerpen van mijn database in een EDMX-diagram
- Toen het diagram klaar was, heb ik de DDL voor SQL Server gegenereerd.
-
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
- Ik wilde dat de app de Code First-aanpak zou gebruiken (alleen mijn voorkeur. Ik denk dat het gemakkelijker te onderhouden is)
- Dus ik maakte verbinding met de SQL Server-database en genereerde al mijn klassen op basis van dat schema.
- Ik kreeg al mijn unit-tests doorstaan en besloot toen om het te testen met de Oracle-database
- Zelfs na het veranderen van DATE naar Timestamp, had ik nog steeds problemen met de milliseconden die binnenkwamen.
- Ik heb nog een Code First-model gegenereerd in een visuele teststudio-oplossing met een
TIMESTAMP(6)
typ Oracle, behalve toen ik keek naar deOnModelCreating
code, het heeft niets gegenereerd metHasPrecision(6)
er waren ook geen decorateurs op het terrein in de gegenereerde C# POCO-klasse. - Ik heb gemerkt dat als je de
HasPrecision(6)
. hebt code in uwOnModelCreating
, de code eerstCreateDatabase()
zal daadwerkelijk een OracleTIMESTAMP(6)
. maken . Als u dat niet doet, gebruikt de Oracle EF-providerDATE
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.