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

Việc chuyển đổi kiểu dữ liệu datetime2 thành kiểu dữ liệu smalldatetime dẫn đến giá trị nằm ngoài phạm vi. \ R \ n Câu lệnh đã bị chấm dứt

Từ giao diện của lỗi, cơ sở dữ liệu của bạn đang sử dụng SmallDateTime làm loại ngày. Giá trị tối thiểu của nó là 1900-Jan-01. Giả sử thực thể của bạn giống như bên dưới

  public class Game
  {
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid GameId { get; set; }

    [Required]
    public DateTime GameTime { get; set; }
  }

Giá trị GameTime của bạn không thể nullable, vì vậy khi bạn không đặt bất kỳ giá trị nào cho nó, nó sẽ luôn là DateTime.Min là 0000-Jan-01. Điều này nằm ngoài phạm vi của SmallDateTime, nhưng nó nằm trong phạm vi của DateTime2. Vì vậy, EF sẽ cố gắng chuyển một kiểu SQL DateTime2 đến máy chủ SQL. Vì cơ sở dữ liệu của bạn đang sử dụng SmallDateTime, bạn sẽ gặp lỗi được hiển thị trong câu hỏi của mình.

Để giải quyết vấn đề, bạn có các tùy chọn sau mà tôi có thể nghĩ đến:

  • làm cho trường không có giá trị. (bạn phải luôn kiểm tra xem ngày nhập của mình có nằm trong phạm vi SmallDateTime hay không.)

  • hoặc thay đổi loại ngày thành DateTime2 trong máy chủ SQL

  • hoặc buộc EF sử dụng kiểu dữ liệu DateTime2 khi tạo cơ sở dữ liệu. Mã sẽ giống như một cái gì đó bên dưới. (Phương thức này nên nằm trong lớp ngữ cảnh của bạn.)

ghi đè

  protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity()
            .Property(t => t.GameTime )
            .HasColumnType("datetime2");
    }
  • Viết trình trợ giúp chuyển đổi để đặt giá trị tối thiểu của thuộc tính DateTime của bạn để khớp với smalldatetime trong ứng dụng của bạn.

  • Viết kích hoạt trong cơ sở dữ liệu để chuyển đổi DateTime2 (từ phần cuối ứng dụng, nhưng datetime2 ở phần cuối cơ sở dữ liệu) thành smalldatetime.

Hy vọng rằng tôi đã hiểu đúng câu hỏi của bạn và câu trả lời của tôi sẽ giúp ích cho bạn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thêm Zeros dẫn đầu &theo sau trong SQL Server

  2. Tập lệnh được cải tiến trả về tất cả các thuộc tính từ SERVERPROPERTY () trong SQL Server

  3. Có thể xảy ra va chạm GUID không?

  4. Tham số đầu ra máy chủ PHP Sql

  5. Cách tìm các bảng không sử dụng trong SQL Server