如何用关系更新急切加载的实体

时间:2012-06-18 15:34:49

标签: asp.net-mvc entity-framework-4

我在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)。声明有   已被终止。“

或类似的东西。

现在,由于几乎不可能对类似主题提出谷歌问题,我正在做一些严重错误的事情。它是什么?

0 个答案:

没有答案