5

Tôi có bảng cơ sở dữ liệu mà trông như thế này:Entity Framework Cardinality Issue trên Hiệp hội 0 ... 1

Schema Diagram

Một Task có thể được ánh xạ tới một Module, hoặc không ánh xạ ở tất cả (0. ..1). Tôi đang sử dụng cơ sở dữ liệu Entity Framework-đầu tiên, và khi tôi tạo ra mô hình từ cơ sở dữ liệu, thực thể Task đi qua với các Mô-đun như một bộ sưu tập (0 hoặc nhiều hơn). Vì vậy, tôi đã mở EDMX của mình và thay đổi thuộc tính điều hướng "Mô-đun" trên Task thành 0 ... 1.

EDMX

Bây giờ, khi tôi cố gắng để biên dịch, tôi nhận được lỗi này:

Error 3003: Problem in mapping fragments starting at line 1241:Given the cardinality of Association End Member Task, it should be mapped to key columns of the table TaskModule. Either fix the mapping or change the multiplicity of this end.

Tôi không hiểu những gì tôi cần phải làm gì để khắc phục điều này. Tôi đã xem chi tiết liên kết và không thể thấy sự cố. Tôi biết tôi có thể thiếu một cái gì đó ngu ngốc, nhưng hoàn toàn bị mắc kẹt. tính liên kết:

TaskModule Association

Visual Studio 2010 SP1, Entity Framework 4.3.1.0, SQL Server 2008 R2.

Trả lời

5

Một cách để thực hiện việc này là xác định lại khóa chính cho bảng TaskModule. Thay vì khóa chính là (TaskId, ModuleName) nó cần phải được chỉ (TaskId). Sau đó, làm một mô hình cập nhật từ cơ sở dữ liệu và thay đổi bất kỳ liên kết nào theo cách thủ công mà không được chọn từ bản cập nhật đó.

+0

không có ý nghĩa để có Bảng TaskModule. ModuleName phải là một khóa ngoại có thể vô hiệu hóa trong Task –

+2

@ Raphaël Althaus Dường như với tôi đó là một câu trả lời triết học (tức là vi phạm NF thứ ba, nhưng gây tranh cãi cho dù bạn có nên hay không). Bạn có thể chỉ cho tôi tài liệu hỗ trợ POV của bạn không? Hãy xem http://stackoverflow.com/questions/1723808/nullable-foreign-key-bad-practice – Dean

+0

Đó là một câu hỏi tuyệt vời mà bạn đã liên kết, Dean. Tôi đoán tôi là người thiểu số, có lẽ tôi là trường học cũ, nhưng các khóa ngoại quốc vô giá trị thực sự làm tôi khó hiểu. Tôi đã thay đổi bảng TaskModule như bạn đã đề xuất và mọi thứ hoạt động tốt ngay bây giờ. –

1

Vâng schema cơ sở dữ liệu của bạn là không đúng với mô tả bạn cung cấp:

bảng TaskModule đối trẻ một mối quan hệ nhiều-nhiều, không phải là một many-to-oneOrZero.

Trong edmx, các bảng quan hệ nhiều-nhiều không được hiển thị, nhưng chúng vẫn tồn tại trong cơ sở dữ liệu.

Vì vậy, bạn nên sửa chữa cơ sở dữ liệu của mình hoặc hài lòng với mối quan hệ do EF đề xuất!