В базе данных у меня есть таблицы Reservations
и OldReservations
, где OldReservations
является копией (из таблицы Reservations
) и используется для хранения старых резервирований. В обеих таблицах используются автоматически сгенерированные ключи идентификации, но первая имеет начальное число 0, а вторая - начальное число 1000, поэтому значения ключей в этих двух таблицах не перекрываются. Вот шаги, которые я сделал для создания наследования TPC:
1) Я получил OldReservation
сущность от Reservation
сущности
2) Я удалил перекрывающиеся свойства из OldReservation
объекта
3) Затем я сопоставил поля таблицы OldReservations
в XML файла 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 удастся отправить команду вставки в базу данных. Есть идеи, почему я получаю исключение?
Спасибо