我有兩個表在我的數據庫連接的外鍵: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