У меня есть две таблицы: адрес и контакт, которые объединены на contactID (в контакте). Обе эти таблицы имеют сущности в моей модели данных Entity (EF 4.0), и я не хочу их изменять.Entity Framework - проблема со структурой сущности
Я хочу создать новый объект, который содержит информацию от обоих объектов.
То, что я сделал до сих пор:
В 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>
Ошибка я получаю это:
Проблема с отображением фрагментов, начиная с at l ine 150: Необходимо указать отображение для всех ключевых свойств (ContactTest.addressID) EntitySet ContactTest.
Как я могу сопоставить AddressID от объекта Contact, если он не существует в этом объекте? Я предполагаю, что мне нужна какая-то ассоциация, но я не уверен, как это сделать ... Помните, что я не хочу изменять существующие сущности Address и Contact.
У меня есть эта же проблема, но я не понимаю ничего из вышеизложенного, есть ли определение ламнов этого для кого-то нового для рамки сущности? Спасибо – AlexW
Ну, это был ответ на гораздо более старую версию EF ... назад в 1.0 дня. С тех пор было много шансов, поэтому я не знаю, применяется ли это, но дело в том, что для объединения адреса и контакта оба объекта должны содержать один и тот же ключ. В случае OP адрес был сущностью, у которой был первичный ключ, addressID. Чтобы напрямую связать контакт с адресом, объект Contact, а также его базовая таблица также должны иметь адресID. EF может затем надлежащим образом связать две половины объекта через их общий ключ ... addressID. – jrista