2010-07-28 32 views
5

Tôi đã có ứng dụng LINQ to Entities và dự án cơ sở dữ liệu để quản lý lược đồ trong giải pháp hướng dẫn giải pháp VS 4.0 .NET 4.0. Mô hình thực thể hiện được thiết kế ngược từ cơ sở dữ liệu. Một trong các bảng được định nghĩa với một cột kiểu datetime. Dự án cơ sở dữ liệu được cấu hình để sử dụng chế độ tương thích SQL Server 2005 và vì vậy tất cả đều triển khai OK.LINQ to Entities tạo truy vấn có chứa datetime2 trên SQL 2005 Express

Tôi đã chỉ chạy vào một vấn đề mà một báo cáo cập nhật thông qua các khuôn khổ thực thể dường như được sử dụng datetime2 hơn là datetime, gây ra một ngoại lệ vì SQL 2005 không hỗ trợ kiểu dữ liệu:

System.Data.UpdateException: An error occurred while updating the entries. 
See the inner exception for details. ---> System.ArgumentException: The version 
of SQL Server in use does not support datatype 'datetime2'. 

Từ stack trace được vẻ là lỗi dường như xảy ra bên trong:

System.Data.Mapping.Update.DynamicUpdateCommand 

tôi đã nhìn qua tất cả các mã SQL của tôi và mã đơn vị và khẳng định rằng không có tài liệu tham khảo để tồn tại datetime2 (bao gồm cả các tập tin dbschema). Tôi chỉ có thể kết luận rằng kiểu dữ liệu đang được tạo trong truy vấn SQL động được tạo bởi khung thực thể.

Làm cách nào để xác nhận hoặc từ chối điều này và cách tôi ngừng điều đó xảy ra? Khung thực thể không biết rằng tôi đã yêu cầu dự án db nhắm mục tiêu chế độ tương thích 2005 và tôi không thể thấy cách để chỉ ra phiên bản mà nó đang xem xét. Đối với những gì nó có giá trị, tôi tạo ra dự án này trên một máy đã có 2008 Express cài đặt, nhưng tôi định kỳ chuyển sang một máy khác mà không (và không thể nâng cấp chỉ được nêu ra).

+2

Đối với bất kỳ ai gặp vấn đề này với LINQ to SQL, bạn có thể thay đổi kiểu dữ liệu của trường bảng thành "smalldatetime" trong SQL Server. Sau đó, kéo lại các bảng của bạn vào DBML, biên dịch lại, triển khai lại và bạn nên thiết lập. Tôi không thể xác định vị trí tương đương với ProvidermanifestToken cho LINQ to SQL –

Trả lời

13

Bạn cần thay đổi ProviderManifestToken bên trong EDMX thành giá trị 2005. Có thể bạn đã tạo DB của mình dựa trên DB 2008. Thực hiện thay đổi này và EF sẽ ngừng sử dụng cú pháp 2008.

+0

hoàn hảo! Cảm ơn bạn! –

+0

Rất hữu ích, cảm ơn rất nhiều. – Fanda

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