Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Dostawca Oracle Entity Framework nie przechowuje DateTime.Now z milisekundami

Aha! Mój wspaniały kolega wpadł na pomysł i zadziałał!

W naszym kodzie EF próbowaliśmy umieścić

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

A potem DateTime.Now z milisekundami zostały zapisane w bazie danych

Aktualizacja - warto wspomnieć, jak znalazłem się w tej sytuacji

Budowanie bazy danych za pomocą Model First w „testowej” aplikacji

  1. Moja aplikacja musi działać zarówno z SQL Server, jak i Oracle. Więc...
  2. Zacząłem od zaprojektowania mojej bazy danych na diagramie EDMX
  3. Po wykonaniu diagramu wygenerowałem DDL dla SQL Server.
  4. Z jakiegoś powodu dostawca Oracle EF nie mógł wygenerować DDL, więc zacząłem ręcznie wprowadzać zmiany w SQL Server DDL, aby było to poprawne składniowo

    Pierwszy problem - mój Oracle DDL używał daty zamiast znacznika czasu. Upewnij się, że używasz znacznika czasu!!! DateTime w Oracle nie przechowuje milisekund.

Korzystanie z Code First z bazy danych dla rzeczywistego rozwiązania

  1. Chciałem, aby aplikacja korzystała z podejścia Code First (tylko moje preferencje. Myślę, że jest łatwiejsza w utrzymaniu)
  2. Więc połączyłem się z bazą danych SQL Server i wygenerowałem wszystkie moje klasy z tego schematu.
  3. Zdałem wszystkie moje testy jednostkowe, a następnie zdecydowałem się przetestować je z bazą danych Oracle
  4. Nawet po zmianie z DATE na sygnaturę czasową nadal miałem problemy z upływającymi milisekundami.
  5. Wygenerowałem kolejny model Code First w testowym rozwiązaniu Visual Studio z TIMESTAMP(6) wpisz Oracle, z wyjątkiem sytuacji, gdy spojrzałem na OnModelCreating kod, nie wygenerował niczego za pomocą HasPrecision(6) nie było też żadnych dekoratorów na właściwości w wygenerowanej klasie C# POCO.
  6. Zauważyłem, że masz HasPrecision(6) kod w Twoim OnModelCreating , Code FirstCreateDatabase() faktycznie utworzy Oracle TIMESTAMP(6) . Jeśli tego nie zrobisz, dostawca Oracle EF użyje DATE

Myślę, że jeśli zastosujesz podejście Model First, możesz ustawić wartości precyzji na diagramie EDMX, ale słyszałem, że to zła praktyka.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak napisać skrypt wstawiania oracle z jednym polem jako CLOB?

  2. SQL Server:jak naśladować oracle zachować gęstą_rankingową kwerendę?

  3. SEC_CASE_SENSITIVE_LOGON Przestarzałe w 12c

  4. Używanie parametrów z połączeniem Oracle ODBC

  5. Oracle:Oblicz różnicę czasu w GG:MM:SS między 2 datami