【问题标题】:Entity framework using old primary keys when inserting new records in database在数据库中插入新记录时使用旧主键的实体框架
【发布时间】:2013-06-11 18:17:23
【问题描述】:

我现在使用 MVC 4 和 EF 多次遇到严重问题。 这个问题最好用例子来说明:

我在 DB 表中有以下 PK 1、2、3、4 的记录。 1 和 2 被删除。当 EF 去插入一条新记录时,它再次为它分配 PK 1。下一个插入将使用 2,然后它会尝试 3 并获得 PK 违规。

我昨天在另一个插入的表中看到了同样的东西。

在下图中,您可以看到 db.SaveChanges 在使用 PK 3 插入新记录时失败。

如下图所示,数据库设置为自动增量:

这是我的控制器操作(它用于插入和编辑 - 但这不重要):

if (ModelState.IsValid)
        {
            //update pricelist
            Pricelist pricelist = new Pricelist();            
            pricelist.InjectFrom(adminEditPricelistVM.Pricelist);
            pricelist.PricelistProducts = new List<PricelistProduct>();

            pricelist.SubscriberId = (int)UserManagement.getUsersSubscriberId(WebSecurity.GetUserId(System.Web.HttpContext.Current.User.Identity.Name));

            if (adminEditPricelistVM.Pricelist.PricelistId != 0)
            {
                db.Entry(pricelist).State = EntityState.Modified;
            }
            else
            {
                db.Pricelists.Add(pricelist);

            }
            db.SaveChanges();
            adminEditPricelistVM.Pricelist.PricelistId = pricelist.PricelistId;

 etc...

我唯一的线索是,在我的数据的播种配置中,我们在替换数据时使用以下命令从 1 开始播种:

context.Database.ExecuteSqlCommand("DBCC CHECKIDENT ('Features',  RESEED, 1)");

也许这与它有关,但我对此表示怀疑 - 因为当时没有调用它。

顺便说一句,这并不一致。我无法手动复制。它似乎不时发生,当它发生时,EF 将在每次插入尝试时继续出错,直到它通过所有使用的 ID 并找到下一个空闲的 ID。换句话说,我会在 PK 3 上插入错误。然后在下一次插入尝试时,它会在 PK 4 上出错,然后在下一次尝试时它会成功,因为没有使用 PK 5。就好像,某处正在使用的 PK 记忆被重置了。

任何帮助将不胜感激!

【问题讨论】:

    标签: entity-framework asp.net-mvc-4 sql-server-2012


    【解决方案1】:

    好的。我可以确认问题是由数据库重新种子引起的。无论数据库中的任何剩余记录如何,这基本上都会将计数设置回 1。奇怪但真实。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 2016-08-09
      • 1970-01-01
      相关资源
      最近更新 更多