MVC 5 EF 6插入多行SaveChanges

时间:2015-07-18 02:03:33

标签: asp.net-mvc entity-framework

我正在尝试使用以下代码插入多行。 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方法。

1 个答案:

答案 0 :(得分:0)

我找到了StoreGeneratedPattern的答案。我必须在edmx文件中为主键字段设置此标识,并且它有效。

StoreGeneratedPattern="Identity"