部分保存在实体框架4.1中

时间:2012-06-15 14:21:32

标签: c# entity-framework-4.1

我对Entity Frameworks很新。

我有一组静态数据,其中包括以下内容:

与列具有多对多关系的模板

我想创建一个新的UserReport,它引用现有的Template,以及与所述相同模板关联的Columns的子集。

我希望保存UserReport记录,以及UserReportColumns映射表中的一系列记录,将UserReport链接到现有列。

我的代码如下:

 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链接?

1 个答案:

答案 0 :(得分: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();