Entity Framework - проблема отображения сущностей - PullRequest
3 голосов
/ 29 июня 2010

У меня есть две таблицы: адрес и контакт, которые объединены по 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, когда он не существует в этом объекте?Я предполагаю, что мне нужна какая-то связь, но я не уверен, как это сделать ... Помните, я не хочу изменять существующие сущности Address и Contact.

1 Ответ

4 голосов
/ 29 июня 2010

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

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

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

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

...