我使用LINQ-to-SQL从具有一对多关系的两个表的数据库加载数据(一个Recipe有许多成分).
我加载一个Recipe,LINQ将Ingredient对象检索到绑定到ListBox的EntitySet中.
如果我想从食谱中删除一些成分,我会得到一个"尝试删除食谱和成分之间的关系.但是,其中一个关系的外键(Ingredient.RecipeID)不能设置为null.
我通过在DBML文件中添加'DeleteOnNull ="true"'使用众所周知的解决方案解决了这个问题.但添加此设置仅在我们删除从DB检索到的Ingredient对象时才会消除此问题.
问题在于在代码中创建的成分对象(添加到配方中)并添加到成分的EntitySet集合中,然后在调用SubmitUpdates之前删除.然后,再次发生同样的异常.这通常发生在一个新的,未保存的食谱上,当用户向其添加成分,出错并从食谱中删除一种成分时.我将DeleteOnNull添加到DBML中的'Association Name ="Recipe_Ingredient"'行.
我该如何删除这些物品?我目前看到的唯一解决方案是,我会将成分加载到不在DataContext下的集合中,然后在保存时,删除配方中的所有成分,然后再从该缓存中添加..
try { // Needed for existing records, but will fail for new records yourLINQDataContext.Ingredients.DeleteOnSubmit(ingredient); } catch (Exception) { // Swallow } yourRecipeObject.Ingredients.Remove(ingredient);