2016-04-15 5 views
0

Я использую Entity Framework (V5, я думаю), и в настоящее время я пытаюсь добавить новую строку в таблицу. Таблица, которую я хочу добавить, содержит составной первичный ключ на основе значения «PRN» (в основном уникальный идентификатор клиента) и связанного с ним порядкового номера. Каждый раз, когда информация в этой таблице обновляется, мы вставляем новую строку для PRN и увеличиваем порядковый номер. Номер последовательности не определяется как автоматическое инкрементное значение или IDENTITY в базе данных, так как он не уникален - порядковый номер уникален только для PRN.Добавить объект, который содержит составной первичный ключ

Когда я выполняю следующий код, я получаю InvalidOperationException: «Свойство« DDIPhasedPayment_Seq_Num »является частью ключевой информации объекта и не может быть изменено».

EF, похоже, не изменяет, если я модифицирую только часть PRN первичного ключа и сохраняю запись (что приводит к значению нуля по умолчанию для Seq_Num), но генерирует исключение, когда я пытаюсь изменить другое часть ПК. Как я могу создать и добавить строку в эту таблицу, не нарушая EF?

var nextSequence = GetNextPhasedPaymentSequenceNumber(message.Prn); 
var entity = new Practitioner_DDI_PhasedPayment() 
{ 
    PRN = message.Prn, 
    DDIPhasedPayment_Seq_Num = nextSequence, 
    TSN = message.Tsn, 
    //........ 
    //Various other fields populated 
    //........ 
}; 
dbContext.Practitioner_DDI_PhasedPayment.Add(entity); 

dbContext.SaveChanges(); 
+1

Вы уверены, что не изменяете значение PK в 'GetNextPhasedPaymentSequenceNumber'? –

ответ

0

Герт - спасибо за подсказку, что именно эта проблема:

private short GetNextPhasedPaymentSequenceNumber(int prn) 
    { 
     var lastPayment = WISERDb.Practitioner_DDI_PhasedPayment.Where(ddipp => ddipp.PRN == prn).OrderByDescending(k => k.DDIPhasedPayment_Seq_Num).FirstOrDefault(); 

     if (lastPayment == null) { return 1; } 

     else { return ++lastPayment.DDIPhasedPayment_Seq_Num; } 
    } 

Использование оператора ++ здесь была проблема - она ​​должна была возвращения значения + 1 вместо этого.

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