0

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();
    }

エンティティをビューに渡し、そこで編集し、コントローラーに戻って次のように保存します。

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();
    }

エンティティのリストは非常に高速に読み込まれますが、エンティティを更新できません。得られるのは

「主キー制約 'PK_ Call _5599FCED3AE4474F' の違反。オブジェクト 'dbo.Call' に重複キーを挿入できません。重複キー値は (6d078f37-29e6-4e56-9853-d793994ce163) です。ステートメントは終了しました。」

またはこのようなもの。

現在、同様のトピックに関する質問をグーグルで検索することはほとんど不可能であるため、私は深刻な問題を抱えています。それは何ですか?

4

0 に答える 0