gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:45:39 24 4
gpt4 key购买 nike

我使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com