TPC继承会在插入时抛出异常

时间:2012-02-29 18:43:17

标签: entity-framework entity-framework-4.1

在数据库中,我有ReservationsOldReservations个表,其中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命令发送到数据库之前抛出此异常。为什么我得到例外的任何想法?

谢谢

1 个答案:

答案 0 :(得分:0)

你得到这个例外,因为你正在使用'IsTypeOf(BAModel.Reservation)'而不仅仅是'BAModel.Reservation'。因为这不仅仅是BAModel.Reservation,而且从BAModel.Reservation派生的类型也被映射到Reservations表。那么会发生什么是将OldReservation映射到Reservations表和OldReservations表。