2012-04-09 17 views
1

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); 
} 

Antwort

2

Es gibt keine Möglichkeit, die gleichzeitige Aktualisierung der gemeinsam genutzten Daten zu ermöglichen, während beide Update Anomalien zu verhindern und Serialisierung Ausfälle zu vermeiden. Deadlocks sind eine Art von Serialisierungsfehler. Der Trick besteht darin, die Datenbankanforderungen über eine Schicht zu routen, die Serialisierungsfehler generalisiert und die betroffenen Transaktionen erneut versucht.

Verwandte Themen