9

Tôi đang sử dụng mã EF đầu tiên với ứng dụng asp.net mvc của mình. đây là mã của tôi:chuyển đổi kiểu dữ liệu datetime2 thành lỗi kiểu dữ liệu datetime với Mã EF trước?

Request.RequestDate = DateTime.Now; 

loại RequestDate là datetime trong cơ sở dữ liệu của tôi. và đây là lỗi xảy ra khi tôi sử dụng mã ở trên !:

Việc chuyển đổi kiểu dữ liệu datetime2 thành kiểu dữ liệu datetime dẫn đến giá trị ngoài phạm vi.

hãy giúp tôi. cảm ơn.

+0

bản sao có thể có của [C# chuyển đổi của kiểu dữ liệu datetime2 thành kiểu dữ liệu datetime] (http://stackoverflow.com/questions/1331779/c-sharp-conversion-of-a-datetime2-data-type-to -a-datetime-data-type) – CodeCaster

+0

Bạn đang sử dụng SQL 2005? phạm vi datetime2 là từ 0001/01/01 đến 9999/12/31 do đó lỗi. Nếu vậy, bạn cần chỉnh sửa tệp XML edmx –

+0

@json jong: Tôi đang sử dụng máy chủ sql 2008 và tôi không có tệp .edmx vì tôi sử dụng Mã đầu tiên !. –

Trả lời

11

Edit:

How to fix the datetime2 out-of-range conversion error using DbContext and SetInitializer?

Vấn đề là bạn đang cố gắng tiết kiệm một giá trị không thể phù hợp trong một cột SQL datetime. câu trả lời givin ở đây sẽ ngừng chuyển đổi từ thất bại.

hoặc trong Cơ sở dữ liệu của bạn thay đổi các cột sẽ được nhập datetime2. Tôi không biết chính xác lý do tại sao họ mã đầu tiên được tạo ra cột datetime thay vì datetime2

Dưới đây là một ví dụ để ánh xạ một cách rõ ràng cột Datetime của bạn để datetime2 trong SQL

Using DateTime properties in Code-First Entity Framework and SQL Server

+0

Tôi đang sử dụng Code First và tôi không có tệp .edmx. –

+0

Tôi nghĩ rằng những gì bạn cần làm là xác định cột là loại datetime. Trước tiên mã của bạn có tạo Cơ sở dữ liệu không? cố gắng lưu trữ đối tượng datetime2 trong cột datetime –

+0

Có cơ sở dữ liệu của tôi được tạo thành công với mã đầu tiên và cột đó là kiểu datetime. –

5

Về phía tôi đó là vì datetime không phải là nullable và trong một số trường hợp, trường không được khởi tạo trong constructor. tôi giải quyết điều này bằng cách thiết lập trường của tôi như nullable

public DateTime? MyDate { get; set; } 

Một giải pháp khác sẽ được khởi tạo lĩnh vực này trong các nhà xây dựng không có vấn đề gì.

+0

Điều này đã giải quyết nó cho tôi. Trên phản ánh thông báo lỗi không phải là tuyệt vời. Tôi tạo ra một cột DateTime, tại sao nó cố gắng chuyển đổi nó thành cái gì khác? tại sao không chỉ cho tôi biết một ràng buộc đã bị vi phạm ... – sarin