【发布时间】:2009-05-25 04:11:12
【问题描述】:
我的数据库中有两个通过外键连接的表:Page(PageId,其他数据)和 PageTag(PageId,Tag)。我使用 LINQ 为这些表生成类,页面作为父集合,标签作为子集合(一对多关系)。有没有办法在 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 类中标记子元素以从数据库中删除的方法?
【问题讨论】:
标签: linq linq-to-sql