我将 EF4 与 ASP.Net MVC 一起使用,我想知道如何更新急切加载的实体?
当我按如下方式加载实体时:
static readonly Func<Entities, Guid, IQueryable<Call>> CallByGuid =
CompiledQuery.Compile<Entities, Guid, IQueryable<Call>>(
(db, callGuid) =>
db.Calls
.Where(c => !c.Removed && c.CallGUID.Equals(callGuid)));
public Call GetCall(Guid guid)
{
return CallByGuid.Invoke(_db, guid).Single();
}
并将实体传递给视图,在那里对其进行编辑并返回给控制器并保存如下:
public Call UpdateCall(Call call)
{
_db.ObjectStateManager.ChangeObjectState(call, EntityState.Modified);
_db.Call_VoiceCall.ApplyCurrentValues(call);
_db.SaveChanges();
Call dbCall = FindCall(call.CallGUID);
return dbCall;
}
一切正常,虽然很慢。当我按如下方式加载实体时:
static readonly Func<Entities, Guid, IQueryable<Call>> CallByGuid =
CompiledQuery.Compile<Entities, Guid, IQueryable<Call>>(
(db, callGuid) =>
db.Calls
.Include("Call_VoiceCall")
.Include("Call_Rating")
.Include("Memos")
.Include("Company")
.Include("PhoneService")
.Where(c => !c.Removed && c.CallGUID.Equals(callGuid)));
public Call GetCall(Guid guid)
{
return CallByGuid.Invoke(_db, guid).Single();
}
实体列表加载速度非常快,但我无法更新实体:我得到的是
“违反 PRIMARY KEY 约束 ' PK_Call _5599FCED3AE4474F'。无法在对象 'dbo.Call' 中插入重复键。重复键值为 (6d078f37-29e6-4e56-9853-d793994ce163)。语句已终止。”
或类似的东西。
现在,由于几乎不可能在谷歌上搜索类似主题的问题,所以我做错了。它是什么?