2016-04-15 8 views
0

私はEntity Framework(V5と思っています)を使用しています。現在、テーブルに新しい行を追加しようとしています。私が追加したいテーブルには、値 "PRN"(基本的に一意の顧客ID)と関連するシーケンス番号に基づく複合主キーがあります。この表の情報が更新されるたびに、PRNの新しい行を挿入し、シーケンス番号を増やします。シーケンスナンバーは、ユニークではないためデータベース上の自動インクリメント値またはIDENTITYとして定義されません。シーケンス番号はPRNごとに一意です。コンポジットプライマリキーを含むエンティティを追加します。

次のコードを実行すると、InvalidOperationExceptionが発生します。「プロパティ 'DDIPhasedPayment_Seq_Num'はオブジェクトのキー情報の一部であり、変更できません。

プライマリキーのPRN部分のみを変更してレコードを保存すると(Seq_Numのデフォルト値は0になります)、他のレコードを変更しようとすると例外がスローされますPKの一部。 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

あなたは 'GetNextPhasedPaymentSequenceNumber'でPK値を変更していませんか? –

答えて

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を返すされている必要があります。

関連する問題