Nói rằng tôi có các định nghĩa bảng sau trong SQL Server 2008:Làm cách nào để loại bỏ Lỗi 3002?
CREATE TABLE Person
(PersonId INT IDENTITY NOT NULL PRIMARY KEY,
Name VARCHAR(50) NOT NULL,
ManyMoreIrrelevantColumns VARCHAR(MAX) NOT NULL)
CREATE TABLE Model
(ModelId INT IDENTITY NOT NULL PRIMARY KEY,
ModelName VARCHAR(50) NOT NULL,
Description VARCHAR(200) NULL)
CREATE TABLE ModelScore
(ModelId INT NOT NULL REFERENCES Model (ModelId),
Score INT NOT NULL,
Definition VARCHAR(100) NULL,
PRIMARY KEY (ModelId, Score))
CREATE TABLE PersonModelScore
(PersonId INT NOT NULL REFERENCES Person (PersonId),
ModelId INT NOT NULL,
Score INT NOT NULL,
PRIMARY KEY (PersonId, ModelId),
FOREIGN KEY (ModelId, Score) REFERENCES ModelScore (ModelId, Score))
Ý tưởng ở đây là mỗi người có thể chỉ có một ModelScore mỗi Model, nhưng mỗi người có thể có một số điểm cho bất kỳ số mô hình được xác định. Theo như tôi có thể nói, SQL này nên thực thi các ràng buộc này một cách tự nhiên. ModelScore có một "ý nghĩa" cụ thể, được chứa trong Định nghĩa. Không có gì làm rung chuyển trái đất ở đó.
Bây giờ, tôi thử dịch thành Entity Framework bằng cách sử dụng trình thiết kế. Sau khi cập nhật mô hình từ cơ sở dữ liệu và thực hiện một số chỉnh sửa, tôi có một đối tượng Person, một đối tượng Model và một đối tượng ModelScore. PersonModelScore, là một bảng kết nối, không phải là một đối tượng mà đúng hơn là được bao gồm như một liên kết với một số tên khác (giả sử ModelScorePersonAssociation). Các chi tiết bản đồ cho hiệp hội như sau:
- Association - Maps to PersonModelScore - ModelScore ModelId : Int32 <=> ModelId : int Score : Int32 <=> Score : int - Person PersonId : Int32 <=> PersonId : int
Về phía bên tay phải, các giá trị ModelId và PersonId có những biểu tượng khóa chính, nhưng giá trị Điểm không.
Khi biên soạn, tôi nhận được:
Error 3002: Problem in Mapping Fragment starting at line 5190: Potential runtime violation of table PersonModelScore's keys (PersonModelScore.ModelId, PersonModelScore.PersonId): Columns (PersonModelScore.PersonId, PersonModelScore.ModelId) are mapped to EntitySet ModelScorePersonAssociation's properties (ModelScorePersonAssociation.Person.PersonId, ModelScorePersonAssociation.ModelScore.ModelId) on the conceptual side but they do not form the EntitySet's key properties (ModelScorePersonAssociation.ModelScore.ModelId, ModelScorePersonAssociation.ModelScore.Score, ModelScorePersonAssociation.Person.PersonId).
đã Tôi đã làm gì sai trong thiết kế hay cách khác, và làm thế nào tôi có thể sửa chữa các lỗi?
Rất cám ơn!
Bạn nên chấp nhận câu trả lời của Shan. Đó là chính xác và lưu thịt xông khói của tôi. –