我有一个使用Entity Framework 4和DbContext api的通用存储库。调用Update时,存储库使用工作对象单元注册实体和存储库。
当在工作单元上调用commit时,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;
}
答案 0 :(得分:1)
只需删除您Attach
实体的行。请注意,代理实体由创建它的上下文跟踪。如果您没有Detach
或使用AsNoTracking()
,则无法将其附加到其他环境中。
public virtual void PersistUpdateOf(EntityBase entity)
{
_context.Entry(entity).State = EntityState.Modified;
}