1

コードでデータベースの挿入、削除、更新にLinqを使用しています。InsertOnSubmit を使用してデータを挿入しているときに、 cannot add an entity that already exists例外が発生します。私のコードを見てください

private static void AddNewPriceSettings(PRICE_SETTING priceSettingsInfo)
{
   PRICE_SETTING priceSetting = new PRICE_SETTING();
   priceSetting = priceSettingsInfo;           
   DataContext.CommonUsers.PRICE_SETTINGs.InsertOnSubmit(priceSettingsInfo);          
   DataContext.CommonUsers.SubmitChanges();
}
4

3 に答える 3

2

新しい priceSetting のプロパティを設定するだけです。

private static void AddNewPriceSettings(PRICE_SETTING priceSettingsInfo)
{
   PRICE_SETTING priceSetting = new PRICE_SETTING();
   //
   priceSetting.Prop1 = priceSettingsInfo.Prop1;
   priceSetting.Prop2 = priceSettingsInfo.Prop2;
   priceSetting.Prop3 = priceSettingsInfo.Prop3;
   // ...
   DataContext.CommonUsers.PRICE_SETTINGs.InsertOnSubmit(priceSetting );          
   DataContext.CommonUsers.SubmitChanges();
}
于 2012-07-26T12:50:49.320 に答える
0

AddNewPriceSettings()既存のオブジェクトを使用して呼び出す場合PRICE_SETTINGは、実際にそれを再度追加しようとしています。メソッドの 2 行目でそれを行います。最初のnew PRICE_SETTING();行で作成した は参照されなくなり、挿入せずに GC されます。

priceSettingsInfoコピーを作成する場合は、変数を挿入して送信する前に、変数にクローンを作成する必要がありpriceSettingます (これにはさまざまな手法を使用できます)。

于 2012-07-26T12:42:00.350 に答える
0
cannot add an entity that already exists

問題は、エラー メッセージによって明確に示されています。挿入しようとしているエンティティと同じエンティティを含む行がデータベースに既に存在します。

SQL は 2 つの項目が「同じ」かどうかをどのように判断しますか? 通常は整数 ID であるキー列を使用します。

それで、私はあなたに尋ねます - あなたの列定義は、影響を受けるテーブルをどのように探しますか? そしてPRICE_SETTING、メソッドに渡されたものをどこで取得していますか?

問題は、既存のオブジェクトに対して更新を実行しようとしている可能性もあります。その場合、別の方法を使用する必要があります。コンテキストに関する詳細情報を共有してください。

于 2012-07-26T12:42:21.520 に答える