0

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

我在数据库表中有以下 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 记忆被重置了。

任何帮助将不胜感激!

4

1 回答 1

0

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

于 2013-06-11T20:16:10.470 回答