我有两个表在我的数据库连接的外键:Page(PageId,其他数据)和PageTag(PageId,标签)。我已经使用LINQ为这些表生成类,其中父页为父页,标记为子集(一对多关系)。有没有什么办法在页面类中标记PageTag记录以便从数据库中删除?如何从LINQ to SQL中的子集合中删除记录?
快速Clearification:
我想要当父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类。
有没有人知道一种方法来标记子元素从页面类中的数据库中删除?
该协会是在地方,我可以通过编程访问子集。问题是对集合所做的更改(特别是删除对象)不会持久保存到数据库。 – AaronSieb 2009-05-23 20:23:45
愚蠢的问题,但你提交更改? – 2009-05-23 21:05:41
是的。当我提交更改时,我得到一个重复键错误(因为新标签重叠旧标签)。 – AaronSieb 2009-05-23 21:56:46