Linq2SQL:DeleteAllOnSubmit判别重新添加的实体?

时间:2010-01-27 15:41:11

标签: linq-to-sql deleteallonsubmit

与Linq遇到一些奇怪的行为:

情况:

  1. 我在两个实体之间有多对多关系:UserProfile和BusinessUnit(加入UserProfile_BusinessUnit表)。

  2. 使用ListBox,用户可以多选择UserProfile所属的BusinessUnits。

  3. 在更新记录时,我打电话给:

    dataContext.UserProfile_BusinessUnit.DeleteAllOnSubmit(userProfile.BusinessUnits); dataContext.SubmitChanges();

  4. 这最终会删除UserProfile_BusinessUnit

  5. 中的记录
  6. 然后我使用foreach

    从多选中添加条目

    foreach(model.BusinessUnitsSelected中的var b)             {                 userProfile.BusinessUnits.Add(GetBusinessUnitAsEntity(b.ToString()));             }             dataContext.SubmitChanges();

  7. 问题:

    只有NET NEW BusinessUnits被添加回关系。如果BusinessUnit仍然被选中并作为DeleteAllOnSubmit的一部分进行处理,则不会重新添加...就像dataContext继续看到标记为删除的记录(即使我已经调用了SubmitChanges())。 ..

    编辑:我尝试在调用之间删除SubmitChanges()以查看它是否会解析,但它只会删除所有条目并且不会重新添加...

    编辑:我添加了以下内容以使其正常工作......对我来说似乎是一个黑客攻击:

     dataContext = null;
     dataContext = new UserProfileDataContext();
    

    是否应该有办法让datacontext“提交”并继续前进?

    关于如何进行的任何想法?我考虑过抛弃DeleteAllOnSubmit,并明确比较进出的内容......但这似乎比我应该做的工作要多得多......

    谢谢!

    守则:

    dataContext.UserProfile_BusinessUnits.DeleteAllOnSubmit(userProfile.UserProfile_BusinessUnits);
    dataContext.SubmitChanges(); // all records deleted
    
    foreach (var b in model.BusinessUnitsSelected)
       {
         userProfile.BusinessUnits.Add(GetBusinessUnitAsEntity(b.ToString()));
       }
    cx.SubmitChanges(); // only net new being added
    

1 个答案:

答案 0 :(得分:0)

试试这个:

foreach (var b in model.BusinessUnitsSelected) 
   { 
     var unit = GetBusinessUnitAsEntity(b.ToString());
     userProfile.BusinessUnits.Add(unit); 
     db.BusinessUnits.InsertOnSubmit(unit);
   } 

您还可以添加到本地馆藏和主要业务单位表格。