Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Nhà cung cấp Oracle Entity Framework không lưu trữ DateTime.Now với mili giây

Aha! Đồng nghiệp tuyệt vời của tôi đã có một ý tưởng và nó đã hoạt động!

Trong mã EF của mình, chúng tôi đã thử đặt

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

Và sau đó là DateTime.Now với mili giây được lưu trữ vào cơ sở dữ liệu

Cập nhật - điều đáng nói là tôi đã lâm vào tình trạng khó khăn này như thế nào

Xây dựng cơ sở dữ liệu với Model First trong ứng dụng "thử nghiệm"

  1. Ứng dụng của tôi phải hoạt động với cả SQL Server và Oracle. Vì vậy ...
  2. Tôi đã bắt đầu bằng cách thiết kế cơ sở dữ liệu của mình trong Sơ đồ EDMX
  3. Sau khi hoàn tất sơ đồ, tôi đã tạo DDL cho SQL Server.
  4. Vì một số lý do mà nhà cung cấp Oracle EF không thể tạo DDL nên tôi đã tiến hành thực hiện các thay đổi đối với SQL Server DDL theo cách thủ công để nó đúng cú pháp

    Vấn đề đầu tiên - Oracle DDL của tôi đã sử dụng Ngày thay vì Dấu thời gian. Hãy chắc chắn rằng bạn sử dụng Dấu thời gian !!! DateTime trong Oracle không lưu trữ mili giây.

Sử dụng Mã trước từ Cơ sở dữ liệu cho giải pháp thực tế

  1. Tôi muốn ứng dụng sử dụng cách tiếp cận Code First (Chỉ là tùy chọn của tôi. Tôi nghĩ nó dễ duy trì hơn)
  2. Vì vậy, tôi đã kết nối với cơ sở dữ liệu SQL Server và tạo tất cả các lớp của mình từ giản đồ đó.
  3. Tôi đã vượt qua tất cả các bài kiểm tra đơn vị của mình và sau đó quyết định kiểm tra nó với cơ sở dữ liệu Oracle
  4. Ngay cả sau khi thay đổi từ DATE thành Dấu thời gian, tôi vẫn gặp sự cố với phần nghìn giây trôi qua.
  5. Tôi đã tạo một mô hình Code First khác trong giải pháp studio trực quan thử nghiệm với TIMESTAMP(6) gõ vào Oracle, ngoại trừ khi tôi nhìn vào OnModelCreating mã, nó không tạo ra bất kỳ thứ gì với HasPrecision(6) cũng như không có bất kỳ người trang trí nào trên sản phẩm trong lớp C # POCO đã tạo.
  6. Tôi nhận thấy nếu bạn có HasPrecision(6) mã trong OnModelCreating của bạn , Mã đầu tiên CreateDatabase() sẽ thực sự tạo ra một Oracle TIMESTAMP(6) . Nếu bạn không, thì nhà cung cấp Oracle EF sẽ sử dụng DATE

Tôi nghĩ rằng nếu bạn thực hiện phương pháp Tiếp cận Mô hình Đầu tiên, bạn có thể đặt các giá trị chính xác trong biểu đồ EDMX, nhưng tôi nghe nói rằng đó là một phương pháp không tốt.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle sql hoặc pl / sql:Tính toán dựa trên các giá trị hàng trước đó và trên cột ngày tháng

  2. Kiểm soát nguồn cơ sở dữ liệu với Oracle

  3. ngoại lệ bảo mật java:vi phạm niêm phong trong khi cố gắng kết nối với cơ sở dữ liệu

  4. Sao chép dữ liệu giữa các lược đồ Oracle bằng SQL

  5. CHỌN đơn giản với biến nhưng không có INTO