2009-06-08 16 views
0

私は、通常のasp_userテーブルに「設定」テーブルを追加したデータレイヤーでlinqをSQLに使用しています。 この設定テーブルでは、私はいくつかのレコードを保持しています(どちらが優先ユニット(Unitsテーブルへの外部キー)か)。Linq to SQLの更新で重複レコードが作成される

ここで、リターからキログラムに変更する必要がある場合、UnitServiceを呼び出して正しいユニットインスタンスを取得し、このインスタンスにsetting.PreferedUnitを設定します。 これはデータベースに新しい(重複した)アイテムを作成します(Unitsテーブルに2キロのレコードがあります)。もちろんこれは私が意図したものではありません。

私は基本的な原料の束を感覚をやっている間違った

UserSetting setting = AccountService.GetUserSetting(user.Identity.Name); 
if (setting.PreferedUnitId != unitId) 
    setting.Unit = UnitService.GetUnitById(unitId); 
AccountService.SaveuserSetting(setting); 

答えて

1

おそらく、DataContext.Unitsを実行する必要があります。 Attach(ユニット)を使用して、ユニットオブジェクトが既に存在し、挿入する必要がないことをLinqがSQLに知らせることができます。私はあなたのUnitsテーブルがDataContextのUnitsプロパティとして公開されていると仮定しています。

ここでは推測していますが、AccountServiceがUnitServiceとは異なるDataContextを使用しているように見えます。実際には切断されたオブジェクトのシナリオになっているようです。このblog postは少し物事を少しはっきりさせるかもしれません

+0

はい、そうです。それはおそらくそれを修正するでしょう。 –

1

AccountService.SaveuserSettingは何をしますか?おそらく不要なInsertOnSubmitを実行しています。

+0

はい、それは暗黙的ですか?私の変更を元に戻してコミットしてはならないと決めるとどうなりますか? –

関連する問題