Аха! Моят страхотен колега имаше идея и тя проработи!
В нашия EF код се опитахме да поставим
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<EntityClass>().Property(p => p.TIMESTAMP).HasPrecision(6);
}
И след това DateTime.Now
с милисекунди се съхраняват в базата данни
Актуализация - струва си да спомена как попаднах в това затруднение
Изграждане на базата данни с Model First в "тестово" приложение
- Приложението ми трябва да работи както със SQL Server, така и с Oracle. И така...
- Започнах с проектиране на моята база данни в EDMX диаграма
- След като диаграмата беше готова, генерирах DDL за SQL Server.
-
По някаква причина доставчикът на Oracle EF не можа да генерира DDL, така че продължих ръчно да правя промени в SQL Server DDL, така че да е правилен синтактично
Първи проблем - моят Oracle DDL използваше дата вместо времево клеймо. Уверете се, че използвате времево клеймо!!! DateTime в Oracle не съхранява милисекунди.
Използване на код първо от базата данни за действителното решение
- Исках приложението да използва подхода „Първо кодиране“ (Мое предпочитание. Мисля, че е по-лесно за поддръжка)
- И така се свързах с базата данни на SQL Server и генерирах всичките си класове от тази схема.
- Издържах всички мои модулни тестове и след това реших да го тествам с базата данни на Oracle
- Дори след промяната от DATE на Timestamp, все още имах проблеми с изтичащите милисекунди.
- Генерирах друг модел Code First в тестово визуално студио решение с
TIMESTAMP(6)
въведете в Oracle, освен когато погледнахOnModelCreating
код, той не генерира нищо сHasPrecision(6)
нито е имало декоратори на собствеността в генерирания C# POCO клас. - Забелязах, че имате
HasPrecision(6)
код във вашияOnModelCreating
, първият кодCreateDatabase()
всъщност ще направи OracleTIMESTAMP(6)
. Ако не го направите, тогава доставчикът на Oracle EF ще използваDATE
Мисля, че ако използвате подхода Model First, можете да зададете прецизни стойности в EDMX диаграмата, но съм чувал, че това е лоша практика.