我正在尝试使用以下代码插入多行。 SaveChanges()适用于第一个记录,但如果尝试下一个记录失败。我的猜测是每次尝试插入所有记录。不确定这是否正确,如果它是正确的,我如何更改代码以使其正确。以下是我的代码: Contrroller:
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类型的多个实体具有相同的主键值。请确保显式设置主键值是唯一的。确保在数据库中正确配置了数据库生成的主键使用Entity Designer进行数据库优先/模型优先配置。使用'HasDatabaseGeneratedOption \'流畅API或'DatabaseGeneratedAttribute'进行代码优先配置。“
我正在使用DatabaseFirst方法。
答案 0 :(得分:0)
我找到了StoreGeneratedPattern的答案。我必须在edmx文件中为主键字段设置此标识,并且它有效。
StoreGeneratedPattern="Identity"