【发布时间】:2015-07-18 02:03:33
【问题描述】:
我正在尝试使用以下代码插入多行。 SaveChanges() 适用于第一条记录,但如果在尝试下一条记录时失败。我的猜测是,每次它都试图插入所有记录。不确定这是否正确,如果正确,我该如何更改代码以使其正确。以下是我的代码: 控制器:
foreach(var m in pms)
{
_pmService.AddPms(m);
}
在 _pmService.AddPms 中:
_pmRepository.Add(pm);
_pmRepository.SaveChanges();
_pmRepository.Add(实际上这是来自 BaseRepository 并且 pmRepository 扩展了这个 Base)
_ctx.Set<T>().Add(entity);
最后,这是我的 SaveChanges()(这也是来自 BaseRepostiroy)
_ctx.ChangeTracker.DetectChanges();
return _ctx.SaveChanges();
所以在控制器中,我 循环 遍历每个条目,然后调用 Add。 Add in 服务是调用 BaseRepository 中的 Add,然后执行 SaveChanges()。对于第一个记录,它可以正常工作,但从第二个记录开始它会失败。以下是错误:
“保存或接受更改失败,因为 XXXXXXXXXXXXX 类型的多个实体具有相同的主键值。确保显式设置的主键值是唯一的。确保在数据库中正确配置了数据库生成的主键并在实体框架模型中。使用实体设计器进行数据库优先/模型优先配置。使用“HasDatabaseGeneratedOption\”流式 API 或“数据库生成属性”进行代码优先配置。”
我正在使用 DatabaseFirst 方法。
【问题讨论】:
-
我认为您的问题类似于stackoverflow.com/questions/22489118/…
标签: asp.net-mvc entity-framework