在数据库中,我有Reservations
和OldReservations
个表,其中OldReservations
是(Reservations
表的)副本,用于存储旧保留。两个表都使用自动生成的身份密钥,但第一个种子为0,第二个种子为1000,因此两个表中的键值不重叠。以下是我创建TPC继承的步骤:
1)我从OldReservation
实体派生了Reservation
个实体
2)我从OldReservation
实体中删除了重叠属性
3)然后我在EDMX文件的XML中映射了OldReservations
表字段:
<EntitySetMapping Name="Reservations">
<EntityTypeMapping TypeName="IsTypeOf(BAModel.Reservation)">
<MappingFragment StoreEntitySet="Reservations">
<ScalarProperty Name="ReservationID" ColumnName="ReservationID" />
<ScalarProperty Name="ReservationDate" ColumnName="ReservationDate" />
<ScalarProperty Name="EventID" ColumnName="EventID" />
<ScalarProperty Name="ContactID" ColumnName="ContactID" />
<ScalarProperty Name="RowVersion" ColumnName="RowVersion" />
</MappingFragment>
</EntityTypeMapping>
<EntityTypeMapping TypeName="IsTypeOf(BAModel.OldReservation)">
<MappingFragment StoreEntitySet="OldReservations">
<ScalarProperty Name="ReservationID" ColumnName="ReservationID" />
<ScalarProperty Name="ReservationDate" ColumnName="ReservationDate" />
<ScalarProperty Name="EventID" ColumnName="EventID" />
<ScalarProperty Name="ContactID" ColumnName="ContactID" />
<ScalarProperty Name="RowVersion" ColumnName="RowVersion" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
执行上述步骤后,项目编译没有任何错误,但当我尝试在OldReservations
表中插入新行时,我得到:
UpdateException:跨多个实体或关联共享的值在多个位置生成。检查映射是否将EntityKey拆分为多个存储生成的列。 ---&GT; System.ArgumentException:已添加具有相同键的项目。
var reservation = new OldReservation();
reservation.ReservationDate = DateTime.Now;
reservation.ContactID = 129;
context.Reservations.AddObject(reservation);
context.SaveChanges();
在EF管理将insert命令发送到数据库之前抛出此异常。为什么我得到例外的任何想法?
谢谢
答案 0 :(得分:0)
你得到这个例外,因为你正在使用'IsTypeOf(BAModel.Reservation)'而不仅仅是'BAModel.Reservation'。因为这不仅仅是BAModel.Reservation,而且从BAModel.Reservation派生的类型也被映射到Reservations表。那么会发生什么是将OldReservation映射到Reservations表和OldReservations表。