2012-04-12 5 views
1

Я использую Entity Framework 4.3.1, и я пытаюсь вставить новую запись в таблицу, на которой основан объект ProductVersion.Вставка строки Entity Framework с составным ключом

Объект ProductVersion имеет 2 свойства, которые составляют составной первичный ключ для таблицы с именем ProductId и ProductOrdinal.

Всякий раз, когда кто-то обновляет запись продукта, я создаю и передаю объект ProductVersion обратно в мой репозиторий, увеличивая свойство ProductOrdinal и пытаясь добавить объект в контекст и сохранить его.

я получаю следующее сообщение об ошибке:

The property 'ProductOrdinal' is part of the object's key information and cannot be modified.

Ни один из столбцов, составляющих ключ являются автонумерация и я аннотированный свойства в моем POCO со следующим:

[Key, Column("PROD_Ordinal", Order=2), DatabaseGenerated(DatabaseGeneratedOption.None)] 
public long ProductOrdinal { get; set; } 
+1

Из-за исключения и вашего описания кажется, что вы увеличиваете свойство ProductOrdinal на существующем экземпляре ProductVersion и пытаетесь его сохранить. Что вы, вероятно, захотите сделать, это создать новый экземпляр «ProductVersion» из существующего экземпляра и увеличить свойство «ProductOrdinal» и сохранить новый экземпляр. – alwayslearning

+0

Я проверю это. Я думаю, вы можете быть правы. – Maxmanzero

+1

Вы были абсолютно правы. Контекст был все еще открытым, поэтому, когда я обновлял «текущий» объект и делал свое сравнение, насколько я понял, я обновил один и тот же объект, и он жаловался, что я пытался обновить ключ, который уже был вставлен. – Maxmanzero

ответ

1

Marc_S был совершенно прав в своем комментарии относительно того, почему это не работает.

Из-за исключения и вашего описания кажется, что вы увеличиваете свойство ProductOrdinal на существующем экземпляре ProductVersion и пытаетесь его сохранить. Возможно, вам захочется создать новый экземпляр «ProductVersion» из существующего экземпляра и увеличить свойство «ProductOrdinal» и сохранить новый экземпляр.

Смежные вопросы