2011-09-14 24 views
5

Tôi đã tạo các lớp (DbContext) lập mô hình db của tôi (SQL Server 2008 R2) và trong hầu hết các bảng của tôi, tiêu chuẩn ModifiedDate và CreatedDate (No Nulls). Mỗi trong số này có một mặc định của getdate() trong SQLServer, và tôi có một kích hoạt để cập nhật ModifiedDate trên bất kỳ bản cập nhật nào.Ngày tạo và sửa đổi MVC 3 có giá trị mặc định và trình kích hoạt trong SQL Server 2008 R2, nhưng vẫn muốn giá trị

Chế độ xem được tạo bao gồm các trường ModifiedDate và CreatedDate mà tôi không muốn (người dùng sẽ không nhìn thấy các trường này), vì vậy tôi đã loại bỏ chúng, nhưng khi thêm mục mới bằng cách sử dụng chế độ xem Tạo được tạo, Tôi nhận được lỗi "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". Sau đó tôi đã thêm một số giá trị mặc định và nó đã thêm bản ghi, nhưng tự nhiên nó đã thêm giá trị đã nhập của tôi và không phải giá trị SQL getdate() mà tôi muốn (tôi muốn hiển thị thời gian máy chủ) . Kiểm tra đối tượng (db.SaveChanges()) các trường có giá trị {1/01/0001 12:00:00 AM}.

Tôi làm cách nào để sử dụng các mô hình này mà không cần nhập ngày ??? Tôi đã tìm kiếm nhưng không tìm thấy câu trả lời của tôi ... ;-(

Trả lời

4

Đây là một vấn đề phổ biến ở cả Entity Framework và LINQ to SQL:

Trong LINQ-To-SQL mô hình không biết về các giá trị mặc định, và do đó cố gắng gán chúng là "null" - trong trường hợp này là không thể chấp nhận được. Để khắc phục điều này, hãy mở tệp DBML và đặt tùy chọn "Giá trị được tạo tự động" thành "true" cho các trường . trong câu hỏi

trong Entity Framework đó là một chút khác nhau:. bạn đặt "StoreGeneratedPattern" trên các lĩnh vực hoặc là "Identity" hoặc "Điện Toán" đây là mô tả:

http://msdn.microsoft.com/en-us/library/system.data.metadata.edm.storegeneratedpattern.aspx

EF sẽ tự động thực hiện việc này đối với trường loại Identity, nhưng không tự động cho trường giá trị mặc định/không rỗng. Bạn có thể muốn đặt CreateDate là "Identity" (chỉ cập nhật khi chèn) và ModifiedDate của bạn là "Computed" (cập nhật khi chèn và cập nhật).

Sản phẩm phụ của điều này là bạn sẽ không thể đặt các trường thông qua LINQ chút nào - nhưng điều đó tốt trong trường hợp sử dụng của bạn, tôi nghĩ vậy.

+0

Cảm ơn vì điều này, đó là vị trí bật. Chúng tôi thấy đây sẽ là giải pháp ngay trước khi đăng bài của bạn, nhưng khi nó quay ra có một lỗi trong khung thực thể có nghĩa là các cài đặt này vẫn chưa được chọn. VS2010 SP1 sửa lỗi này và chúng tôi không chạy SP1. Tất cả tốt bây giờ mặc dù, nhờ sự giúp đỡ của bạn! – Daryl

Các vấn đề liên quan