2008-12-03 24 views
7

Tôi đang sử dụng LINQ cho các thực thể áp dụng cách tiếp cận Table per Type. Điều này đã diễn ra rất tốt, cho đến bây giờ. Tôi có các thiết lập sau:LINQ đối với các thực thể, Bảng cho mỗi loại và mối quan hệ khóa ngoại tệ dễ vỡ

  • Bảng Chánh
  • Bảng Child (Inherits từ mẹ)
  • Đại Child Bảng (Inherits từ Bảng Child)
  • Linking Bảng (Có Ngoại chính Nullable, để Bảng con)

Dưới đây là sơ đồ cơ sở dữ liệu

alt text

Theo đoạn video trên, tôi áp dụng phương pháp tiếp cận theo từng loại cho lược đồ mặc định mà LINQ cho các thực thể tạo khi bạn thêm các bảng trên vào một mô hình.

Trước khi áp dụng Bảng mỗi Type:

alt text

Sau Bảng mỗi Type:

alt text

sau đó tôi biên soạn dự án và đã nhận lỗi, bạn có thể nhìn thấy trong hình ở trên. Để khắc phục điều này, tôi đã đi đến ánh xạ cho liên kết khóa ngoài, tôi đã thêm trường childid, thông báo lỗi được rên rỉ.

alt text

sau đó tôi biên dịch lại và nhận được một lỗi:

Problem in Mapping Fragments starting at lines 147, 176: Two entities with different keys are mapped to the same row. Ensure these two mapping fragments do not map two groups of entities with overlapping keys to the same group of rows.

Đây là điểm tôi đang ở bây giờ. Vấn đề dường như là "ChildID" trên "LinkingTable" là Nullable. Nếu tôi đặt nó là Không nullable tôi không nhận được lỗi trên.

Tôi đã lưu Cơ sở dữ liệu và dự án được sử dụng trong các bước trên vào sky drive.

Có ai biết cách sửa lỗi này không?

Dave

Dưới đây là Bộ luật cố định (Nhờ Các Gecko)

Trước

<AssociationSetMapping Name="FK_LinkingTable_Child" 
    TypeName="TablePerTypeModel.FK_LinkingTable_Child" 
    StoreEntitySet="LinkingTable"> 
    <EndProperty Name="Child"> 
     <ScalarProperty Name="Id" ColumnName="ChildID" /> 
    </EndProperty> 
    <EndProperty Name="LinkingTable"> 
     <ScalarProperty Name="LinkTableID" ColumnName="LinkTableID" /> 
    </EndProperty> 
</AssociationSetMapping> 

Sau

<AssociationSetMapping Name="FK_LinkingTable_Child" 
    TypeName="TablePerTypeModel.FK_LinkingTable_Child" 
    StoreEntitySet="LinkingTable"> 
    <EndProperty Name="Child"> 
     <ScalarProperty Name="Id" ColumnName="ChildID" /> 
    </EndProperty> 
    <EndProperty Name="LinkingTable"> 
     <ScalarProperty Name="LinkTableID" ColumnName="LinkTableID" /> 
    </EndProperty> 
    <Condition ColumnName="ChildID" IsNull="false"/> 
</AssociationSetMapping> 

Trả lời

5

Thử cập nhật nút AssociationMapping trong phần Mapping của tệp EDMX của bạn để bao gồm điều kiện để cho phép null.

ví dụ:

<AssociationSetMapping> 
    ... 
    <Condition ColumnName="" IsNull="false"/> 
</AssociationSetMapping> 
+0

Cảm ơn .. tôi sẽ cung cấp cho nó một cách và cho bạn biết. – CraftyFella

+0

rực rỡ ... mà hoàn toàn hoạt động .. Nó bây giờ trông như thế này: CraftyFella

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