c# - LINQ-to-SQL + 一对多 + 数据绑定(bind)删除

标签 c# linq-to-sql entityset

我使用 LINQ-to-SQL 从具有一对多关系的两个表的数据库中加载数据(一个食谱有很多成分)。

我加载一个 Recipe,LINQ 将 Ingredient 对象检索到绑定(bind)到 ListBox 的 EntitySet 中。

如果我想从食谱中删除一些成分,我会收到“试图删除食谱和成分之间的关​​系。但是,关系的外键之一 (Ingredient.RecipeID) 不能设置为空。

我通过向 DBML 文件添加“DeleteOnNull="true"”来使用众所周知的解决方案解决了这个问题。但是添加此设置只会在我们删除从数据库中检索到的成分对象时消除问题。

问题出在代码中创建的成分对象(添加到配方中)并添加到成分的 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);

关于c# - LINQ-to-SQL + 一对多 + 数据绑定(bind)删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/384755/

相关文章:

C# Interop 将数组数组写入工作表

c# - 使用条件/三元 ("?:") 运算符进行转换

c# - 对 ObservableCollection 中更改的对象使用react

c# - 在 C# 中使用 LINQ 自动递增通用列表

c# - 通用列表到 EntitySet 的转换

linq-to-sql - ASP.NET MVC/LINQ : What's the proper way to iterate through a Linq. View 中的实体集?

oop - 实体集和实体有什么区别?这是定义标准吗?

c# - 为什么 MSBuild 重建共享项目?

时间:2019-03-17 标签:c#Linq to SQL and Generics

c# - 将数据从 Linq to SQL 查询返回为自定义数据类型