0

我将 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)。语句已终止。”

或类似的东西。

现在,由于几乎不可能在谷歌上搜索类似主题的问题,所以我做错了。它是什么?

4

0 回答 0