我正在处理这个项目,我们有一个保存实体的表单,在保存它之前,我们通过检查数据库上实体的唯一属性来检查记录是否不存在。
这工作得很好,除了在我们非常快速地多次按下提交表单按钮的情况下。在这种情况下,数据库检查不起作用,它会在数据库中创建多个记录条目。
我认为这是应用程序的设计问题,但我是工作单元模式的新手,我不明白为什么不工作。
这是我们在服务层做的检查:
IEnumerable<Story> Stories = _unitOfWork.StoryRepository.Get(s => e.GUID.Equals(GUID));
if (Stories.Count() > 0)
{
_unitOfWork. StoryRepository.Insert(newStory);
_unitOfWork.Save();
}
任何人都可以帮助解决这个问题吗?
顺便说一句,我不是基于 javascript 的解决方案,只是服务器端。
谢谢
编辑:该服务使用 ninject 并具有传递工作单元的构造函数:
private IUnitOfWork _unitOfWork;
public StoryService(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
我的 UnitOfWork 类被声明为:
public class UnitOfWork : Disposable, IUnitOfWork
数据库工厂.cs:
public class DatabaseFactory : Disposable, IDatabaseFactory
{
private myContext _dataContext;
private readonly object _door = new object();
public myContext Get()
{
lock (_door)
{
return _dataContext ?? (_dataContext = new myContext());
}
}
protected override void DisposeCore()
{
if (_dataContext != null)
_dataContext.Dispose();
}
}
每次我按照 Pluc 的建议调用我的服务方法时,我是否应该创建一个 UnitOfWork 实例?