私はこのプロジェクトに取り組んでおり、エンティティを保存するフォームがあり、保存する前に、データベース上のエンティティの一意の属性をチェックして、レコードが存在しないことを確認します。
これは、フォームの送信ボタンを非常にすばやく複数回押すシナリオを除いて、正常に機能します。この場合、データベースチェックは機能せず、データベースにレコードの複数のエントリが作成されます。
アプリケーションの設計上の問題だと思いますが、作業単位のパターンが初めてで、なぜ動作しないのかわかりません。
これは、サービスレイヤーで行うチェックです。
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
DatabaseFactory.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のインスタンスを作成する必要がありますか?