我有一个通用存储库,它使用带有 DbContext api 的实体框架 4。调用 Update 时,存储库将实体和存储库注册到工作单元对象。
当在工作单元上调用 commit 时,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;
}