我对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链接?
答案 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();