Entity framework 在数据库中插入新记录时使用旧主键的实体框架
我在使用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的内存在某个地方被重置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设置为自动递增: 这是我的控制器操作(用于插入和编辑-但这不重要): 也许这与此有关,但我对此表示怀疑
任何帮助都将不胜感激 好的。我可以确认问题是由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)");