私のデータベースには、ページ(PageId、他のデータ)とPageTag(PageId、Tag)の2つのテーブルが外部キーで接続されています。私はLINQを使用して、ページを親として、タグを子コレクションとして(1対多の関係)これらの表のクラスを生成しました。ページクラスからデータベースから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クラスにアクセスすることはできません。
ページクラス内からデータベースから削除する子要素をマークする方法について知っている人はいますか?
Aaron、洞察力のおかげです。しかし、リポジトリに2行のコードを書いて削除の記録をマークするほうが簡単ではないでしょうか? –
リポジトリに2行のコードが残ることはありません。 UpdateTags(Page page、string tagString)メソッドをリポジトリに追加する必要がありますが、モデルバインドではうまく動作しません。 – AaronSieb
これは設定がとても簡単で、On Delete Cascadeにリンクされていることがわかったので、デザイナーファイルを手で編集するのを避けることができます。 – AaronSieb