Aha! Můj úžasný kolega měl nápad a fungovalo to!
V našem EF kódu jsme zkusili vložit
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<EntityClass>().Property(p => p.TIMESTAMP).HasPrecision(6);
}
A pak DateTime.Now s milisekundami se uloží do databáze
Aktualizace – stojí za zmínku, jak jsem se do této nesnáze dostal
Budování databáze s Model First v "testovací" aplikaci
- Moje aplikace musí fungovat se serverem SQL Server i Oracle. Takže...
- Začal jsem návrhem databáze v EDMX diagramu
- Jakmile byl diagram hotový, vygeneroval jsem DDL pro SQL Server.
-
Z nějakého důvodu poskytovatel Oracle EF nemohl vygenerovat DDL, takže jsem přistoupil k ručnímu provedení změn v SQL Server DDL, aby to bylo syntakticky správné
1. problém - můj Oracle DDL používal datum místo časového razítka. Ujistěte se, že používáte Timestamp!!! DateTime v Oracle neukládá milisekundy.
Použití Code First z databáze pro skutečné řešení
- Chtěl jsem, aby aplikace používala přístup Code First (pouze moje preference. Myslím, že je to jednodušší na údržbu)
- Připojil jsem se tedy k databázi SQL Server a vygeneroval všechny své třídy z tohoto schématu.
- Prošel jsem všemi testy jednotek a rozhodl jsem se to otestovat s databází Oracle
- I po změně z DATE na Timestamp jsem měl stále problémy s přibývajícími milisekundami.
- Vygeneroval jsem další model Code First v testovacím řešení vizuálního studia s
TIMESTAMP(6)zadejte v Oracle, kromě případů, kdy jsem se podíval naOnModelCreatingkód, nevygenerovalo nic pomocíHasPrecision(6)ani ve vygenerované třídě C# POCO nebyli na pozemku žádní dekoratéři. - Všiml jsem si, že máte
HasPrecision(6)kód ve vašemOnModelCreating, Code FirstCreateDatabase()ve skutečnosti vytvoří OracleTIMESTAMP(6). Pokud tak neučiníte, poskytovatel Oracle EF použijeDATE
Myslím, že pokud použijete přístup Model First, můžete nastavit hodnoty přesnosti v EDMX diagramu, ale slyšel jsem, že je to špatný postup.