我在ASP.Net MVC中使用EF4,我想知道如何更新急切加载的实体?
当我按如下方式加载实体时:
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();
}
并将实体传递给View,在那里编辑并返回Controller并按如下方式保存:
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_ 调用 _5599FCED3AE4474F'。 无法在对象'dbo.Call'中插入重复键。重复的密钥 值是(6d078f37-29e6-4e56-9853-d793994ce163)。声明有 已被终止。“
或类似的东西。
现在,由于几乎不可能对类似主题提出谷歌问题,我正在做一些严重错误的事情。它是什么?