私はこのようなテーブルを持っています
UserPageId (Primary Key) int
UserId (user Foreign Key) int
PageId (page Foreign Key) int
全体のシナリオは、ユーザーが 1 つのページを複数回追加するのを防ぐことです。各ユーザーによると、複数のユーザーで使用でき、同時ユーザーがいる可能性があります。
最初に分離レベルSerializableでこれを解決したいのですが、デッドロックで終わります
私の機能は次のとおりです。
public void Add(int PageId,int UserId)
{
using (TransactionScope scope = newTransactionScope(TransactionScopeOption.RequiresNew,
new TransactionOptions { IsolationLevel = IsolationLevel.Serializable }))
{
using (entities EFmodel = new entities())
{
EFmodel.Connection.Open();
EFmodel._UserId = UserId;
if (!Pages.Exists(EFmodel, PageId))
Pages.Add(EFmodel, PageId);
else
ERModel.AddModelError("", "you have already added this page");
EFmodel.SaveChanges();
}
scope.Complete();
}
return ERModel;
}
Pages.Exist:
public bool Exists(entities EFmodel, int PageId)
{
int ctn = EFmodel.UserPages.Count(x => x.PageId == PageId && x.UserId == EFmodel._UserId);
if(ctn!=0)
return true;
return false;
}
Pages.Add:
public static void Add(entities EFmodel,int PageId)
{
UserPage userpage = new UserPage()
{
UserId = EFmodel._UserId,
PageId = PageId,
UserPageId = 0
};
EFmodel.UserPages.AddObject(userpage);
}