10

Tôi đã có dự án nhắm mục tiêu .NET 4.0 và sử dụng EF 5.0. Sau khi thay đổi khung đích thành 4.5 (và cập nhật tham chiếu EF 5.0 để sử dụng assembly .NET 4.5), có vẻ như các chú thích dữ liệu không hoạt động nữa. Ví dụ:Chú thích dữ liệu EF không "hoạt động" sau khi nhắm mục tiêu .NET 4.5

[Table("ApplicationSession", Schema = "Application")] 
public class ApplicationSessionEntity 
{ 
    [Key, ForeignKey("GenericSession")] 
    public int GenericSessionID { get; set; } 
... 

sử dụng để làm việc tốt, nhưng bây giờ khi chạy, các DbContext ném một InvalidOperationException: Unable to determine the principal end of an association....

Tôi có thể thêm các lệnh gọi hàm api Fluent để giải quyết vấn đề này (và thực hiện), nhưng sau đó nó không nhận ra rằng bảng không nằm trong lược đồ "dbo". Một lần nữa, tôi biết rằng api Fluent có thể được sử dụng để giải quyết vấn đề này, nhưng tại sao các chú thích dữ liệu đột nhiên bị bỏ qua?

Cảm ơn!

+1

Bạn có tham chiếu đến System.ComponentModel.Annotations không? Các chú thích đã được chuyển đến assembly này trong .NET Framework 4.5. Những gì tôi nghĩ có thể xảy ra là bạn bằng cách nào đó được biên dịch với các chú thích các bản báo cáo cũ và thời gian chạy EF5 đang tìm kiếm những cái mới. Bạn có thể nhấn F12 trên Bảng và xem nó đi đâu để kiểm tra điều này. – Pawel

+0

@Pawel Tôi có tham chiếu đến System.ComponentModel.DataAnnotations. Tôi tin rằng nó đã được yêu cầu khi chúng tôi nâng cấp lên EF 5.0. Tôi đã thử sử dụng các phiên bản .NET 4.0 và .NET 4.5 của assembly đó và cả hai đều thể hiện cùng một hành vi. – Rob

+0

Bạn có ở đâu đó tham chiếu đến EntityFramework.dll có phiên bản 4.4.0.0 không? – Pawel

Trả lời

7

Trong .NET Framework 4.5 EF chú thích đã được chuyển từ EF.dll sang System.ComponentModel.Annotations assembly. Dường như mặc dù bạn nhắm mục tiêu .NET Framework 4.5 bạn vẫn có một tham chiếu đến EntityFramework.dll v4.4.0.0 ở đâu đó. Kết quả là các lớp của bạn được biên dịch với các thuộc tính từ assembly 4.4.0.0. Khi chạy EntityFramework.dll mới hơn (5.0.0.0) đang được sử dụng và nó sẽ tìm các thuộc tính từ Assembly.ComponentModel.DataAnnotations. Những người không thể được tìm thấy kể từ khi bạn có những người từ EF.dll 4.4.0.0 và do đó có vẻ như các thuộc tính đang được bỏ qua.

+0

Cảm ơn vì điều này. Tôi đã nâng cấp dự án từ 4.0 -> 4.5 và tham chiếu đến EF 4.4.0.0 đã bị treo. Tôi vừa loại bỏ tham chiếu đến 4.4.0.0 và chạy gói cài đặt nuget. – formatc

0

Đúng là nó đã được chuyển ra ngoài EF nếu bạn sử dụng .NET phiên bản 4.5 trở lên. Nhưng nếu bạn biên dịch trong .NET 4.0, bạn sẽ tìm thấy DataAnnotations như sử dụng. Nhìn vào bên trong mã, bạn sẽ thấy điều này:

#if NET40 

namespace System.ComponentModel.DataAnnotations 
{ 
... 
} 
#endif 

Vì vậy, có ... giống như các câu trả lời khác, nhưng tôi muốn chỉ ra điều này!

Mã hóa vui vẻ!

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