- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的数据库中有两个表通过外键连接: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/
我是一名优秀的程序员,十分优秀!