Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 在数据库中插入新记录时使用旧主键的实体框架_Entity Framework_Asp.net Mvc 4_Sql Server 2012 - Fatal编程技术网

Entity framework 在数据库中插入新记录时使用旧主键的实体框架

Entity framework 在数据库中插入新记录时使用旧主键的实体框架,entity-framework,asp.net-mvc-4,sql-server-2012,Entity Framework,Asp.net Mvc 4,Sql Server 2012,我在使用MVC4和EF时遇到了好几次严重的问题。 下面的例子可以很好地说明这个问题: 我在DB表中记录了以下PKs,1,2,3,4。 删除1和2。当EF插入一条新记录时,它将再次为其分配PK 1。下一次插入将使用2,然后尝试3并获得PK冲突 我昨天在另一张桌子上看到了同样的东西,还有另一个插页 在下图中,您可以看到在插入带有PK 3的新记录时db.SaveChanges失败 如下图所示,DB设置为自动递增: 这是我的控制器操作(用于插入和编辑-但这不重要): 也许这与此有关,但我对此表示怀疑

我在使用MVC4和EF时遇到了好几次严重的问题。 下面的例子可以很好地说明这个问题:

我在DB表中记录了以下PKs,1,2,3,4。 删除1和2。当EF插入一条新记录时,它将再次为其分配PK 1。下一次插入将使用2,然后尝试3并获得PK冲突

我昨天在另一张桌子上看到了同样的东西,还有另一个插页

在下图中,您可以看到在插入带有PK 3的新记录时db.SaveChanges失败

如下图所示,DB设置为自动递增:

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

也许这与此有关,但我对此表示怀疑——因为当时没有叫它

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


任何帮助都将不胜感激

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

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...
context.Database.ExecuteSqlCommand("DBCC CHECKIDENT ('Features',  RESEED, 1)");