在數據庫中,我有Reservations
和OldReservations
表,其中OldReservations
是副本(表的Reservations
),用於存儲舊保留。兩個表都使用自動生成的身份密鑰,但首先有一個種子爲0,第二個種子爲1000,因此兩個表中的鍵值不重疊。下面是我做來創建TPC繼承以下步驟:TPC繼承在插入時拋出異常
1)I衍生OldReservation
實體從實體Reservation
2)I從OldReservation
實體 3除去重疊屬性)我然後被映射在XML中OldReservations
表中的字段在EDMX文件:
<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分割爲多個商店生成的列。 ---> System.ArgumentException:具有相同密鑰的項目已被添加。
var reservation = new OldReservation();
reservation.ReservationDate = DateTime.Now;
reservation.ContactID = 129;
context.Reservations.AddObject(reservation);
context.SaveChanges();
此異常EF之前拋出設法發送命令插入到數據庫。任何想法,爲什麼我得到例外?
謝謝
你的數據庫表中是否有自動生成的'ReservationID'?如何定義自動生成?你還有什麼其他的操作在上下文實例中用來保存'OldReservation'(加載或存儲其他'Reservation'和'OldReservation'實例)? – 2012-03-01 09:31:52
呃,我以前沒有注意到你的回覆。是的,表格使用自動生成的鍵(預訂的種子爲0,OldReservations的種子爲1000)。我不確定你的意思是我在上下文實例上做了哪些其他操作?如果你的意思是在代碼中,那麼除了創建一個新的OldReservation實體並試圖將其插入到OldReservations表中 – user702769 2012-03-01 20:34:22