尝试附加非跟踪条目时,EFCore会抛出System.InvalidOperationException

时间:2017-01-03 18:22:33

标签: c# entity-framework visual-studio-2015 asp.net-core-mvc entity-framework-core

我的数据上下文在创建上下文时关闭了自动跟踪,以防止不必要的跟踪。但是,当我尝试为已经检索的条目启用跟踪时,会抛出异常。如果我通过附加的.AsTracking()获得条目,问题就会消失。

我做错了吗?

这不起作用:

var biz = (from br in _context.BusinessRenewals where br.ACCOUNT == Account select br).First();

biz.EMAIL_ADDRESS = Email;
biz.WEB_SITE = WebSite;
_context.Update(biz);

这确实有效:

var biz = (from br in _context.BusinessRenewals where br.ACCOUNT == Account select br).AsTracking().First();

biz.EMAIL_ADDRESS = Email;
biz.WEB_SITE = WebSite;
_context.Update(biz);

我想要的是这个工作,但它得到一个非跟踪的条目,所以它不起作用:

var biz = GetBusinessRenewal(Account);
biz.EMAIL_ADDRESS = Email;
biz.WEB_SITE = WebSite;
_context.Update(biz);

我得到的例外是:

  

System.InvalidOperationException

     

类型' System.InvalidOperationException'的例外情况发生在Microsoft.EntityFrameworkCore.dll中但未在用户代码中处理

     

附加信息:实体类型实例' BusinessRenewal'无法跟踪,因为已经跟踪了具有相同密钥的此类型的另一个实例。添加新实体时,对于大多数密钥类型,如果未设置密钥,则将创建唯一的临时密钥值(即,如果为密钥属性指定了其类型的默认值)。如果要为新实体显式设置键值,请确保它们不会与现有实体或为其他新实体生成的临时值发生冲突。附加现有实体时,请确保只有一个具有给定键值的实体实例附加到上下文。

我使用的是EFCore 1.0.1,ASP.Net Core 1.0.1,VS2015

现在使用EFCore 1.1.0和ASP.Net Core 1.1.0

0 个答案:

没有答案