当我尝试更新数据库中的一个实体时,出现了以下异常:
由于会话中有其他线程正在运行,因此不允许新事务。
我使用相同的代码块来处理所有传入的数据(从Excel工作簿中抓取)。工作正常的INSERT和无法正常工作的UPDATE之间唯一的区别如下:
public void UploadWorkbook(Workbook workbook, string uploadedBy, string comments)
{
workbook.UploadedBy = uploadedBy;
workbook.Comments = comments;
var existing = _repository.Get(x => x.FileName == workbook.FileName);
if (existing == null)
_repository.Insert(workbook); // this works on the commit
else
_repository.Update(workbook); // this causes commit to fail
_unitOfWork.Commit(); // fails when repository runs update method
}
此外,这是更新方法:
public override void Update(Workbook entity)
{
var existing = Get(x => x.FileName == entity.FileName);
if (existing == null)
{
var message = string.Format(@"Error :: Cannot update Workbook '{0}'
because it does not exist in the database.",
entity.FileName);
throw new Exception(message);
}
existing.Version = entity.Version;
existing.DateModified = DateTime.Now;
existing.Comments = entity.Comments;
existing.FilePath = entity.FilePath;
if (existing.Data != null)
existing.Data.Clear();
existing.Data = entity.Data;
}
这是Get方法的实现:
public virtual T Get(Func<T, bool> where)
{
return _dbSet.Where(where).FirstOrDefault();
}
我看了一些其他关于类似问题的帖子,但并没有像我遇到的这样。我真的被卡住了,因为我无法理解为什么INSERT是有效的,但UPDATE失败了...如果有另一个事务在进行,那么不会导致任何一种操作失败吗?