Entity Framework - проблема отображения сущностей

У меня есть две таблицы: адрес и контакт, которые объединены по contactID (в контакте). Обе эти таблицы имеют сущности в моей модели данных сущностей (EF 4.0), и я не хочу их изменять.

Я хочу создать новую сущность, которая содержит информацию от обеих сущностей.

Что я сделал до сих пор:

В CSDL:

<EntityContainer...>
    <EntitySet Name="AddressTest" EntityType="WebGearsModel.Test" />
    <EntitySet Name="ContactTest" EntityType="WebGearsModel.Test" />
</EntityContainer>

<EntityType Name="Test">
  <Key>
    <PropertyRef Name="addressID" />
  </Key>
  <Property Type="Int32" Name="addressID" Nullable="false" annotation:StoreGeneratedPattern="Identity"  />
  <Property Type="Int32" Name="contactID" Nullable="false"  />
  <Property Type="String" Name="firstName" Nullable="false" MaxLength="30" FixedLength="false" Unicode="false" />
  <Property Type="String" Name="emailAddress" Nullable="false" MaxLength="150" FixedLength="false" Unicode="false" />
</EntityType>

В моем CS отображение:

<EntitySetMapping Name="AddressTest">
  <EntityTypeMapping TypeName="WebGearsModel.Test">
    <MappingFragment StoreEntitySet="Address">
      <ScalarProperty Name="addressID" ColumnName="addressID" />
      <ScalarProperty Name="contactID" ColumnName="contactID" />
      <ScalarProperty Name="firstName" ColumnName="firstName" />
    </MappingFragment>
  </EntityTypeMapping>
</EntitySetMapping>

<EntitySetMapping Name="ContactTest">
  <EntityTypeMapping TypeName="WebGearsModel.Test">
    <MappingFragment StoreEntitySet="Contact">
      <ScalarProperty Name="contactID" ColumnName="contactID" />
      <ScalarProperty Name="emailAddress" ColumnName="emailAddress" />
    </MappingFragment>
  </EntityTypeMapping>
</EntitySetMapping>

Я получаю ошибку:

Проблема в отображении фрагментов, начинающихся со строки 150: необходимо указать сопоставление для всех ключевых свойств (ContactTest.addressID) EntitySet ContactTest.

Как я должен сопоставить AddressID от объекта Contact, когда он не существует в этом объекте? Я предполагаю, что мне нужна какая-то связь, но я не уверен, как это сделать... Помните, я не хочу изменять свои существующие адреса и контакты.

1 ответ

Решение

Запомните определение сущности:

Объект, который не определен его атрибутами, а скорее потоком непрерывности и его идентичностью.

Каждая "сущность" должна иметь что-то, что однозначно идентифицирует это; ключ. Тем не менее, вы, похоже, пытаетесь определить два типа объектов из одного физического типа, который имеет только один ключ, который обеспечивает непротиворечивую идентичность для адресов, но не для контактов. Это нарушает правила сущности, делая концепцию ContactTest недействительной.

Поскольку базовый физический тип, Test, определяет ключевое свойство, addressIDвсе EntitySet, производные от этого типа, должны отображать это свойство в соответствии с правилами, определяющими сущность. В противном случае сохранение согласованности состояния невозможно.

Другие вопросы по тегам