我有一个共享相同数据上下文的工作单元模式。如果在保存过程中发生错误,我会抓住它,并继续处理下一个事件。但是,会发生相同的错误,就好像它仍然具有仍然添加错误的原始事件一样。有没有办法优雅地重置工作单元,删除导致原始错误的项目?我什至删除了下面捕获中的项目,但它仍然没有工作。
我还保留了一个事件列表,以检查该 ID 是否已包含在一个属性中,并且只从数据库中检索一次,不确定这是否重要。
EventsRepository.Add(tournament);
try
{
UnitOfWork.Commit();
}
catch (Exception ex)
{
// Log, Go To Next Event To Process
}
UnitOfWork.cs
public class UnitOfWork : IUnitOfWork
{
private readonly IDatabaseFactory _databaseFactory;
private DataContext _dataContext;
public UnitOfWork(IDatabaseFactory databaseFactory)
{
_databaseFactory = databaseFactory;
}
protected DataContext DataContext
{
get { return _dataContext ?? (_dataContext = _databaseFactory.Get()); }
}
public void Commit()
{
DataContext.Commit();
}
public void SaveChanges()
{
DataContext.SaveChanges();
}
public void Refresh(object o)
{
DataContext.Entry(o);
}
public void Commit(bool autoDetectChanges)
{
DataContext.Configuration.AutoDetectChangesEnabled = false;
DataContext.Commit();
DataContext.Configuration.AutoDetectChangesEnabled = true;
}
}