我使用 LINQ-to-SQL 从具有一对多关系的两个表的数据库中加载数据(一个配方有许多成分)。
我加载一个配方,LINQ 将成分对象检索到一个绑定到列表框的实体集中。
如果我想从食谱中删除一些成分,我会收到“尝试删除食谱和成分之间的关系。但是,关系的一个外键 (Ingredient.RecipeID) 不能设置为空。
我通过将“DeleteOnNull="true"' 添加到 DBML 文件中,使用众所周知的解决方案解决了这个问题。但添加此设置仅在我们删除从数据库中检索到的成分对象时才消除问题。
问题在于在代码中创建的成分对象(添加到配方中)并添加到成分的 EntitySet 集合中,然后在调用 SubmitUpdates 之前删除。然后,同样的异常再次发生。这通常发生在一个新的、未保存的食谱上,当用户向其中添加成分时,犯了一个错误并从食谱中删除了一种成分。我将 DeleteOnNull 添加到 DBML 中的两个 'Association Name="Recipe_Ingredient"' 行。
我应该如何删除这些对象?我目前看到的唯一解决方案是,我会将成分加载到不在 DataContext 下的集合中,然后在保存时,从配方中删除所有成分,然后从该缓存中再次添加。