与Linq遇到一些奇怪的行为:
情况:
我在两个实体之间有多对多关系:UserProfile和BusinessUnit(加入UserProfile_BusinessUnit表)。
使用ListBox,用户可以多选择UserProfile所属的BusinessUnits。
在更新记录时,我打电话给:
dataContext.UserProfile_BusinessUnit.DeleteAllOnSubmit(userProfile.BusinessUnits); dataContext.SubmitChanges();
这最终会删除UserProfile_BusinessUnit
然后我使用foreach
从多选中添加条目foreach(model.BusinessUnitsSelected中的var b) { userProfile.BusinessUnits.Add(GetBusinessUnitAsEntity(b.ToString())); } dataContext.SubmitChanges();
问题:
只有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
答案 0 :(得分:0)
试试这个:
foreach (var b in model.BusinessUnitsSelected)
{
var unit = GetBusinessUnitAsEntity(b.ToString());
userProfile.BusinessUnits.Add(unit);
db.BusinessUnits.InsertOnSubmit(unit);
}
您还可以添加到本地馆藏和主要业务单位表格。