0

我对实体框架很陌生。

我有一组静态数据,其中包括:

与列有多对多关系的模板

我想创建一个新的 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 回答