2

ほとんどの場合にうまく機能する WCF Data Services を使用していますが、関連するエンティティ コレクションを持つエンティティを更新する方法がわかりません。たとえば、以下のコードでは、部門に関連するバッチ オブジェクトがあります。私のデータベースでは、これは 3 つのテーブル (Batches、Departments、Batches_Departments) として表されます。EF はこれを部門のナビゲーション プロパティを持つ Batch オブジェクトとして公開します。

以下に示すコードでは、Batch オブジェクトが作成され、Departments コレクションが設定されますが、SaveChanges を呼び出すと、Batch オブジェクトだけがデータベースに作成されます。部門は無視されます。SaveChanges 行にブレークポイントを設定すると、Departments コレクションが読み込まれたことを確認できます。

private void Save()
{
  var batch = new DataService.Batch() { Description = txtDescription.Text, Filename = txtFilename.Text };

  foreach (var department in lstDepartments.CheckedItems)
  {
    var dept = _ctx.Departments
      .Select(d => d)
      .Where(d => d.DepartmentID == ((DataService.Department)department).DepartmentID)
      .First();

    batch.Departments.Add(dept);
  }

  _ctx.AddToBatches(batch);
  _ctx.SaveChanges();
}

明らかな何かが欠けていると確信していますが、それを見つけることができないようです。どんな助けでも大歓迎です。

4

1 に答える 1

1

これは、現在生成されているコードの制限です。また、次のコード行をプログラムに追加する必要があります。

context.AddLink(batch, "Departments", dept);

必要に応じて、バッチの PropertyChanged イベントにフックすることもできます。

編集:別のオプションも見つけました。ではなく、次のことができますAddLink

private void Save()
{
  var batches = new DataServiceCollection<Batch>(_ctx);
  var batch = new DataService.Batch() { Description = txtDescription.Text, Filename = txtFilename.Text };
  batches.Add(batch);

  foreach (var department in lstDepartments.CheckedItems)
  {
    var dept = _ctx.Departments
      .Select(d => d)
      .Where(d => d.DepartmentID == ((DataService.Department)department).DepartmentID)
      .First();

    batch.Departments.Add(dept);
  }

  // _ctx.AddToBatches(batch);
  _ctx.SaveChanges();
}
于 2012-07-03T16:41:21.943 に答える