0

私はEntity Frameworkを初めて使用します。

以下を含む一連の静的データがあります。

列と多対多の関係を持つテンプレート

既存のテンプレートへの参照を持つ新しい UserReport と、同じテンプレートに関連付けられた列のサブセットを作成したいと考えています。

UserReport レコードと、UserReport を既存の列にリンクする UserReportColumns マッピング テーブルに一連のレコードを保存する予定です。

私のコードは次のとおりです。

 ReportTemplate template = staticData.ReportTemplates.First();
 UserReport newReport = new UserReport()
 {
     ....
     Columns = FilterColumns(template.Columns)
     ....
 }
  ....
  context.UserReports.Attach(userReport);
  context.UserReports.AddObject(userReport);
  context.SaveChanges();

これにより、データベース内のオブジェクト階層のすべてを再作成しようとします。

UserReport と UserReport_Column リンクのみを保存するようにするにはどうすればよいですか?

4

1 に答える 1

1

template別のDbContextインスタンス(またはキャッシュされたデータソース)からを取得しています。したがって、contextはテンプレートと列が新しいオブジェクトであると想定しています。

この問題を克服するには、EFがデータベースにオブジェクトを追加しないように、既存のオブジェクトをコンテキストにアタッチする必要があります。

  foreach(var column in newReport.Columns)
  { 
      context,Column.Attach(column);
  }

  context.UserReports.Attach(template);
  context.UserReports.AddObject(userReport);
  context.SaveChanges();
于 2012-06-15T14:38:07.670 に答える