私は、DbContext APIと共にEntity Framework 4を使用している汎用リポジトリを持っています。 Updateが呼び出されると、リポジトリはエンティティとリポジトリを作業単位オブジェクトに登録します。Entity Frameworkプロキシがレポジトリクラスを破る
作業ユニットでコミットが呼び出され、更新されたエンティティーがEFによってトラッキングされている場合(通常、リポジトリーはASP MVCおよびそのモデル・バインディング・テクノロジー用であるため)、タイプはプロキシー・タイプです。型がモデルに存在しないため、例外がスローされます。 PersistUpdateOfは、EFがプロキシクラスを使用するため、エンティティがEFによって追跡されたときに転倒します。添付の画像にこれが示されています。
トラッキングされたエンティティまたはトラッキングされていないエンティティで動作するプロキシを無効にすることを含む回避策はありますか。
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;
}
スムース!私は、エンティティフレームワークに関するMicrosoftのチュートリアルから、この状況で何もしないアタッチコードを得ました:( – Lee
削除のために何をすればよいでしょうか:_context.Set(entity.GetType())。 EntityStateを削除/削除に設定しますか? – Lee
@leeはい。_context.Set(entity.GetType())の代わりに、_context.Set(typeof(TEntity))をリポジトリ内で使用できます。 – Eranga