Определение структуры Entity Framework 1: 1

.net ado.net entity-framework visual-studio

Вопрос

Я пытаюсь определить связь 1: 1 между двумя сущностями (одна сопоставляется с таблицей, а другая с представлением - используя DefinedQuery) в модели Entity Framework. При попытке определить сопоставление для этого в конструкторе, мне приходится выбирать таблицу (1) или представление, чтобы сопоставить ассоциацию. Что я должен выбрать? Я могу выбрать любую из двух таблиц, но затем я вынужден выбрать столбец из этой таблицы (или представления) для каждого конца отношения. Я ожидал, что смогу выбрать столбец из одной таблицы для одного конца ассоциации и столбец из другой таблицы для другого конца ассоциации, но сделать это невозможно.

Здесь я выбрал отображение в представление «DW_ WF_ClaimInfo», и это заставляет меня выбрать два столбца из этого представления - по одному для каждого конца отношения.

Я также попытался определить отображение вручную в 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, не существует в 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 в конструкторе, так как она содержит внешний ключ. Также вам нужно будет удалить B_ID из объекта A впоследствии.



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему