我的数据上下文在创建上下文时关闭了自动跟踪,以防止不必要的跟踪。但是,当我尝试为已经检索的条目启用跟踪时,会抛出异常。如果我通过附加的.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