Linq to sql Linq2SQL:DeleteAllOnSubmit是否区分要重新添加的实体?

Linq to sql Linq2SQL:DeleteAllOnSubmit是否区分要重新添加的实体?,linq-to-sql,Linq To Sql,Linq遇到了一些奇怪的行为: 情况: 我在两个实体之间有一个多对多关系:UserProfile和BusinessUnit(加入UserProfile\u BusinessUnit表) 使用列表框,用户可以多选择UserProfile所属的业务单元 更新记录时,我调用: dataContext.UserProfile\u BusinessUnit.DeleteAllOnSubmit(UserProfile.BusinessUnits); dataContext.SubmitChanges() 这

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

情况:

  • 我在两个实体之间有一个多对多关系:UserProfile和BusinessUnit(加入UserProfile\u BusinessUnit表)

  • 使用列表框,用户可以多选择UserProfile所属的业务单元

  • 更新记录时,我调用:

    dataContext.UserProfile\u BusinessUnit.DeleteAllOnSubmit(UserProfile.BusinessUnits); dataContext.SubmitChanges()

  • 这最终会从UserProfile\u BusinessUnit中删除记录

  • 然后,我使用foreach从multi-select中添加条目

    foreach(已选择模型业务单元中的var b) { userProfile.BusinessUnits.Add(getBusinessUnitEntity(b.ToString()); } dataContext.SubmitChanges()

  • 问题是:

    只有净新业务单位被添加回关系。如果业务单元保持选中状态,并作为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
    
    试试这个:

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

    您可以将其添加到本地集合和主业务单位表中。

    您可以发布代码吗?这对解决这个问题会有很大帮助。