Можем ли мы объединить TPT, TPH и разделение сущностей в рамках одной иерархии? - PullRequest
0 голосов
/ 08 марта 2012

Я пытаюсь объединить 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>

Любые идеи, почему я получаюисключение?

спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...