Oracle
 sql >> база данни >  >> RDS >> Oracle

Доставчикът на Oracle Entity Framework не съхранява DateTime.Now с милисекунди

Аха! Моят страхотен колега имаше идея и тя проработи!

В нашия EF код се опитахме да поставим

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

И след това DateTime.Now с милисекунди се съхраняват в базата данни

Актуализация - струва си да спомена как попаднах в това затруднение

Изграждане на базата данни с Model First в "тестово" приложение

  1. Приложението ми трябва да работи както със SQL Server, така и с Oracle. И така...
  2. Започнах с проектиране на моята база данни в EDMX диаграма
  3. След като диаграмата беше готова, генерирах DDL за SQL Server.
  4. По някаква причина доставчикът на Oracle EF не можа да генерира DDL, така че продължих ръчно да правя промени в SQL Server DDL, така че да е правилен синтактично

    Първи проблем - моят Oracle DDL използваше дата вместо времево клеймо. Уверете се, че използвате времево клеймо!!! DateTime в Oracle не съхранява милисекунди.

Използване на код първо от базата данни за действителното решение

  1. Исках приложението да използва подхода „Първо кодиране“ (Мое предпочитание. Мисля, че е по-лесно за поддръжка)
  2. И така се свързах с базата данни на SQL Server и генерирах всичките си класове от тази схема.
  3. Издържах всички мои модулни тестове и след това реших да го тествам с базата данни на Oracle
  4. Дори след промяната от DATE на Timestamp, все още имах проблеми с изтичащите милисекунди.
  5. Генерирах друг модел Code First в тестово визуално студио решение с TIMESTAMP(6) въведете в Oracle, освен когато погледнах OnModelCreating код, той не генерира нищо с HasPrecision(6) нито е имало декоратори на собствеността в генерирания C# POCO клас.
  6. Забелязах, че имате HasPrecision(6) код във вашия OnModelCreating , първият кодCreateDatabase() всъщност ще направи Oracle TIMESTAMP(6) . Ако не го направите, тогава доставчикът на Oracle EF ще използва DATE

Мисля, че ако използвате подхода Model First, можете да зададете прецизни стойности в EDMX диаграмата, но съм чувал, че това е лоша практика.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tomcat 6/7 JNDI с множество източници на данни

  2. java.sql.SQLException:ORA-00936:липсващ израз

  3. как да вмъкнете външен ключ в таблица

  4. Тъй като SQL Server няма пакети, какво правят програмистите, за да го заобиколят?

  5. Unpivot on view не работи в Oracle