Linq to Sql update创建重复记录

时间:2009-06-08 09:17:30

标签: c# .net linq-to-sql

我在我的数据层使用linq到sql,我在常规的asp_user表中添加了“settings”表。 在这个设置表中,我保留了几个记录,其中一个是首选单元(单位表的外键)。

现在当这个首选单元需要更改时(比如从升到千克),我调用我的UnitService来获取正确的单元实例并将我的setting.PreferedUnit设置为此实例。 这会在数据库中创建一个新的(重复)项目(我的Units表中现在有两公斤的记录)。这当然不是我的意图。

我感觉我做了一堆基本的错误

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

2 个答案:

答案 0 :(得分:1)

AccountService.SaveuserSetting做什么?它可能正在做一个不必要的InsertOnSubmit

答案 1 :(得分:1)

你可能需要做一个DataContext.Units。Attach(单位)让Linq to SQL知道你的单元对象已经存在而且不需要插入。请注意,我假设您的Units表在DataContext上公开为Units属性。

我在这里推测,但看起来您的AccountService正在使用与您的UnitService不同的DataContext,因此您实际上处于断开连接的对象场景中。这个blog post可能会让事情变得更清晰