Entity Framework 1:1アソシエーションの定義

.net ado.net entity-framework visual-studio

質問

Entity Frameworkモデルで、2つのエンティティ(1つはテーブルにマップし、もう1つはビューにマップする)の間に1:1の関連付けを定義しようとしています。デザイナでこのマッピングを定義しようとすると、関連付けをマッピングするテーブルまたはビューを選択するようになります。何を選ぶべきですか?私は2つのテーブルのどちらかを選ぶことができますがそれから私は関係の各端のためにそのテーブル(またはビュー)から列を選ぶことを強いられます。一方のテーブルから関連の一方の端の列を選択し、もう一方のテーブルからもう一方の端の列を選択することができると思いますが、これを行う方法はありません。

ここでは "DW_WF_ClaimInfo"ビューにマップすることを選択しましたが、そのビューから2つの列を選択することを強制されています。1つは関係の両端に1つです。

また、マッピングをXMLで手動で次のように定義してみました。

<AssociationSetMapping Name="Entity1Entity2" TypeName="ClaimsModel.Entity1Entity2"
     StoreEntitySet="Entity1">
  <EndProperty Name="Entity2">
    <ScalarProperty Name="DOCUMENT" ColumnName="DOCUMENT" />
  </EndProperty>
  <EndProperty Name="Entity1">
    <ScalarProperty Name="PK_DocumentId" ColumnName="PK_DocumentId" />
  </EndProperty>
</AssociationSetMapping>

エラー2010:このMSLの一部として指定された列 'DOCUMENT'がMetadataWorkspaceに存在しません。それはまだ両方の列が同じテーブルから来ることを期待しているように思えますが、これは私には意味がありません。

さらに、各端に同じキーを選択したとします。

<AssociationSetMapping Name="Entity1Entity2" TypeName="ClaimsModel.Entity1Entity2"
     StoreEntitySet="Entity1">
  <EndProperty Name="Entity2">
    <ScalarProperty Name="DOCUMENT" ColumnName="PK_DocumentId" />
  </EndProperty>
  <EndProperty Name="Entity1">
    <ScalarProperty Name="PK_DocumentId" ColumnName="PK_DocumentId" />
  </EndProperty>
</AssociationSetMapping>

私はそれから得る:

Error 3021: Problem in Mapping Fragment starting at line 675: Each of the following
columns in table AssignedClaims is mapped to multiple conceptual side properties:
  AssignedClaims.PK_DocumentId is mapped to
    <AssignedClaimDW_WF_ClaimInfo.DW_WF_ClaimInfo.DOCUMENT,
    AssignedClaimDW_WF_ClaimInfo.AssignedClaim.PK_DocumentId>

私は何を得ていないのですか?

人気のある回答

あなたは外部キーを含むテーブルを選択しなければなりません。次のステップは、作成したばかりの関係を使用してすでに表現されているので、その外部キーをエンティティから削除することです。

例:

table A
-------
A_ID int
B_ID int


table B
-------
B_ID int

この場合、デザイナでテーブルAを選択します。これには外部キーが含まれているためです。また、後でAエンティティからB_IDを削除する必要があります。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ