gpt4 book ai didi

linq - 如何从 LINQ to SQL 中的子集合中删除记录?

转载 作者:行者123 更新时间:2023-12-01 00:42:02 24 4
gpt4 key购买 nike

我的数据库中有两个表通过外键连接:Page (PageId, other data) 和 PageTag (PageId, Tag)。我使用 LINQ 为这些表生成类,页面作为父集合,Tag 作为子集合(一对多关系)。有什么方法可以在 Page 类中将 PageTag 记录标记为从数据库中删除?

快速清理:

我希望在父 DataContext 调用 SubmitChanges() 时删除子对象,而不是之前。我希望 TagString 的行为与 Page 对象的任何其他属性完全一样。

我想启用如下代码:

Page page = mDataContext.Pages.Where(page => page.pageId = 1);
page.TagString = "new set of tags";

//Changes have not been written to the database at this point.

mDataContext.SubmitChanges();

//All changes should now be saved to the database.

下面是我的详细情况:
为了更轻松地处理标签集合,我向 Page 对象添加了一个属性,将标签集合视为字符串:

public string TagString {
get {
StringBuilder output = new StringBuilder();
foreach (PageTag tag in PageTags) {
output.Append(tag.Tag + " ");
}

if (output.Length > 0) {
output.Remove(output.Length - 1, 1);
}

return output.ToString();
}
set {
string[] tags = value.Split(' ');
PageTags.Clear();
foreach (string tag in tags) {
PageTag pageTag = new PageTag();
pageTag.Tag = tag;
PageTags.Add(pageTag);
}
}
}

基本上,这个想法是当一串标签被发送到这个属性时,对象的当前标签被删除,并在它们的位置生成一个新的集合。

我遇到的问题是这一行:

PageTags.Clear();

提交更改时实际上并没有从数据库中删除旧标签。

环顾四周,删除内容的“正确”方法似乎是调用数据上下文类的 DeleteOnSubmit 方法。但我似乎无法从 Page 类中访问 DataContext 类。

有谁知道在 Page 类中标记要从数据库中删除的子元素的方法吗?

最佳答案

经过更多研究,我相信我已经找到了解决方案。从集合中删除对象时将其标记为删除由 Association 属性的 DeleteOnNull 参数控制。

当两个表之间的关系标记为 OnDelete Cascade 时,此参数设置为 true。

不幸的是,无法从设计器中设置此属性,也无法从 *DataContext.cs 文件的分部类中设置它。在不启用级联删除的情况下设置它的唯一方法是手动编辑 *DataContext.designer.cs 文件。

在我的例子中,这意味着找到页面关联,并添加 DeleteOnNull 属性:

[Association(Name="Page_PageTag", Storage="_Page", ThisKey="PageId", OtherKey="iPageId", IsForeignKey=true)]
public Page Page
{
...
}

并添加 DeleteOnNull 属性:

[Association(Name="Page_PageTag", Storage="_Page", ThisKey="PageId", OtherKey="iPageId", IsForeignKey=true, DeleteOnNull = true)]
public Page Page
{
...
}

请注意,该属性需要添加到 PageTag 类的 Page 属性中,而不是相反。

另见:
Beth Massi -- LINQ to SQL and One-To-Many Relationships
Dave Brace -- LINQ to SQL: DeleteOnNull

关于linq - 如何从 LINQ to SQL 中的子集合中删除记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/900919/

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