Аха! Моят страхотен колега имаше идея и тя проработи!
В нашия 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 диаграмата, но съм чувал, че това е лоша практика.