2009-06-08 66 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