0

DbContext API で Entity Framework 4 を使用している汎用リポジトリがあります。Update が呼び出されると、リポジトリはエンティティとリポジトリを作業単位オブジェクトに登録します。

コミットが作業単位で呼び出され、更新されたエンティティが EF によって追跡されている場合 (リポジトリは ASP MVC とそのモデル バインディング テクノロジ用であるため、通常はそうではありません)、タイプはプロキシ タイプであり、例外がスローされます。タイプがモデルに存在しないためです。EF はプロキシ クラスを使用するため、エンティティが EF によって追跡されると、PersistUpdateOf は失敗します。添付の画像はこれを示しています。 ここに画像の説明を入力

追跡されているエンティティまたは追跡されていないエンティティで動作するプロキシを無効にする必要のない回避策はありますか。

    public void Update<TEntity>(TEntity entity) where TEntity : EntityBase
    {
        //Audit the update
        if (entity is IAuditable)
        {
            (entity as IAuditable).AuditEntityUpdate();
        }

        //Register the entity as Amended with the unit of work
        _unitOfWork.RegisterAmended(entity, this);
    }


    public virtual void PersistUpdateOf(EntityBase entity)
    {
        _context.Set(entity.GetType()).Attach(entity);
        _context.Entry(entity).State = EntityState.Modified;
    }
4

1 に答える 1

1

Attachエンティティである行を削除するだけです。プロキシ エンティティは、それを作成したコンテキストによって追跡されることに注意してください。使用していないDetachか使用していない場合はAsNoTracking()、別のコンテキストにアタッチできません。

public virtual void PersistUpdateOf(EntityBase entity)
{
    _context.Entry(entity).State = EntityState.Modified;
}
于 2012-05-06T23:23:44.757 に答える