Ich habe eine Tabelle wie diesekönnen Isolationsstufen doppelte Einfügung verhindern?
UserPageId (Primary Key) int
UserId (user Foreign Key) int
PageId (page Foreign Key) int
und die ganze senario Benutzer zu verhindern, ist eine Seite mehr als einmal hinzufügen ,, nach jedem Benutzer die Verwendung mit mehreren Personen sein können und wir könnten gleichzeitige Benutzer haben
zuerst möchte ich diese Serializable durch Isolationsstufe lösen, aber es endet mit Deadlocks
meine Funktionen sind:
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);
}