【问题标题】:MVC 5 EF 6 Insert Multiple Rows SaveChangesMVC 5 EF 6 插入多行 SaveChanges
【发布时间】: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 方法。

【问题讨论】:

标签: asp.net-mvc entity-framework


【解决方案1】:

我通过 StoreGeneratedPattern 找到了答案。我必须在 edmx 文件中为主键字段设置此标识,它起作用了。

StoreGeneratedPattern="Identity"

【讨论】:

    猜你喜欢
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多