我现在使用 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 记忆被重置了。
任何帮助将不胜感激!