Я пытаюсь объединить TPT, TPH и разбиение сущностей
Таблицы Contacts
и Customers
сопоставлены с сущностями Contact
и Customer
.Я объединил сопоставления TPT и TPH, выполнив следующие действия:
1 - Поскольку таблица Customer
предоставляет дополнительную информацию о подмножестве Contacts
, я определил наследование TPT,где Customer
сущность происходит от Contact
сущности. 2 - Затем я создал новую сущность с именем AlsoCustomer
и выбрал Customer
в качестве базового типа (таким образом, AlsoCustomer
происходит от Customer
, что, в свою очередь, происходит от Contact
), 3 - Затем я создал наследование TPH с использованием Customer
и AlsoCustomer
сущностей, где условное отображение определяет, относится ли запись к типу Customer
или к типу AlsoCustomer
Дос этой точки все работает нормально, но когда я пытаюсь также реализовать разбиение сущностей, где Customer
сущность (как напоминание, AlsoCustomer
-> Customer
-> Contact
) будет сопоставлена обоим Customer
и ContactPersonalInfo
таблиц, тогда я получаю исключение для вставок:
System.Data.UpdateException: обнаружены конфликтующие изменения. Это может произойти при попытке вставить несколько сущностей с одним и тем же ключом.
var customer = new AlsoCustomer();
...
context.Contacts.AddObject(customer);
context.SaveChanges(); // Exception
или:
var customer = new Customer();
...
context.Contacts.AddObject(customer);
context.SaveChanges(); // Exception
Вот соответствующий раздел MSL:
<EntitySetMapping Name="Contacts">
<EntityTypeMapping TypeName="IsTypeOf(BAModel.Contact)">
<MappingFragment StoreEntitySet="Contact">
<ScalarProperty Name="ContactID" ColumnName="ContactID" />
<ScalarProperty Name="RowVersion" ColumnName="RowVersion" />
<ScalarProperty Name="ModifiedDate" ColumnName="ModifiedDate" />
<ScalarProperty Name="AddDate" ColumnName="AddDate" />
<ScalarProperty Name="Title" ColumnName="Title" />
<ScalarProperty Name="LastName" ColumnName="LastName" />
<ScalarProperty Name="FirstName" ColumnName="FirstName" />
</MappingFragment>
</EntityTypeMapping>
<EntityTypeMapping TypeName="IsTypeOf(BAModel.AlsoCustomer)" xmlns="http://schemas.microsoft.com/ado/2008/09/mapping/cs">
<MappingFragment StoreEntitySet="Customers">
<ScalarProperty Name="ContactID" ColumnName="ContactID" />
<ScalarProperty Name="CustomerRowVersion" ColumnName="RowVersion" />
<ScalarProperty Name="SecondaryActivity" ColumnName="SecondaryActivity" />
<ScalarProperty Name="PrimaryActivity" ColumnName="PrimaryActivity" />
<ScalarProperty Name="SecondaryDestination" ColumnName="SecondaryDestination" />
<ScalarProperty Name="PrimaryDesintation" ColumnName="PrimaryDesintation" />
<ScalarProperty Name="InitialDate" ColumnName="InitialDate" />
<ScalarProperty Name="CustomerTypeID" ColumnName="CustomerTypeID" />
<Condition ColumnName="Notes" Value="agent" />
</MappingFragment>
</EntityTypeMapping>
<EntityTypeMapping TypeName="BAModel.Customer" xmlns="http://schemas.microsoft.com/ado/2008/09/mapping/cs">
<MappingFragment StoreEntitySet="Customers">
<ScalarProperty Name="ContactID" ColumnName="ContactID" />
<ScalarProperty Name="CustomerRowVersion" ColumnName="RowVersion" />
<ScalarProperty Name="SecondaryActivity" ColumnName="SecondaryActivity" />
<ScalarProperty Name="PrimaryActivity" ColumnName="PrimaryActivity" />
<ScalarProperty Name="SecondaryDestination" ColumnName="SecondaryDestination" />
<ScalarProperty Name="PrimaryDesintation" ColumnName="PrimaryDesintation" />
<ScalarProperty Name="InitialDate" ColumnName="InitialDate" />
<ScalarProperty Name="CustomerTypeID" ColumnName="CustomerTypeID" />
<Condition ColumnName="Notes" Value="secret agent"/>
</MappingFragment>
</EntityTypeMapping>
<EntityTypeMapping TypeName="IsTypeOf(BAModel.Customer)">
<MappingFragment StoreEntitySet="ContactPersonalInfo">
<ScalarProperty Name="ContactID" ColumnName="ContactID" />
<ScalarProperty Name="DietaryRestrictions" ColumnName="DietaryRestrictions" />
<ScalarProperty Name="WeightPounds" ColumnName="WeightPounds" />
<ScalarProperty Name="HeightInches" ColumnName="HeightInches" />
<ScalarProperty Name="BirthDate" ColumnName="BirthDate" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
Любые идеи, почему я получаюисключение?
спасибо