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