2009-06-08 82 views
0

我在我的數據層中使用linq到sql,我已經將「settings」表添加到常規asp_user表。 在這個設置表中,我保留了其中一個是首選單元(Units表的一個外鍵)的幾個記錄。Linq to Sql更新創建重複記錄

現在當這個首選單位需要改變(比如說從升到千克)時,我會打電話給我的UnitService以獲取正確的單位實例並將我的設置.PreferedUnit設置爲此實例。 這將在數據庫中創建一個新的(重複)項目(我的Units表中現在有兩千克記錄)。這當然不是我想要的。

我有我做錯了一堆根本的東西

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

回答

1

你可能需要做一個DataContext.Units。 Attach(unit)讓Linq to SQL知道你的單元對象已經存在並且不需要被插入。請注意,我假設您的Units表在DataContext上作爲Units屬性公開。

我在這裏推測,但它似乎是你的AccountService使用不同的DataContext到你的UnitService,所以你實際上在斷開對象的情況。這blog post可能會讓事情更清楚一點

+0

是的,你是對的。這可能會解決它。 – 2009-06-08 09:31:15

1

是什麼AccountService.SaveuserSetting做的感覺?這可能是做了一個不必要的InsertOnSubmit

+0

是的,這是隱含的嗎?那麼如果我決定我的改變應該恢復,我不應該承諾會發生什麼? – 2009-06-08 09:32:05