2009-06-12 7 views
1

Ich habe einige Probleme in meinem Projekt. Wenn ich versuche, Entity zu aktualisieren, gibt es mir verschiedene Arten von Fehlern.LINQ :: Verwenden Sie statischen DataContext, um Concurrency zu verhindern Problem

Ich lese aus dem Netz. Diese Fehler sind da

1 - Ich bin Gegenstand der Entity-Klasse von Verfahren erhalten, die Datacontext lokal

und in Update-Methode id wird lokal erstellt nicht aktualisiert werden, da hier eine andere Datacontext erstellt. (auch er wirft keine Ausnahme)

i für dieses Problem im Zusammenhang viele Artikel gefunden

1 - ein Hinzufügen von Timestamp-Spalte in der Tabelle (nicht bewirken in meinem Projekt ich dies versucht.)

Kerl sagte, dass SINGLE DataContext für alle verwenden.

i tat dies, indem Sie die folgende Klasse zu schaffen

public class Factory 
    { 
     private static LinqDemoDbDataContext db = null; 

     public static LinqDemoDbDataContext DB 
     { 
      get 
      { 
       if (db == null) 
        db = new LinqDemoDbDataContext(); 

       return db; 
      } 
     } 
    } 





public static Student GetStudent(long id) 
    { 
     LinqDemoDbDataContext db = Factory.DB; 

     //LinqDemoDbDataContext db = new LinqDemoDbDataContext(); 

      Student std = (from s in db.Students 
          where s.ID == id 
          select s).Single(); 

      return std; 

    } 



public static void UpdateStudent(long studentId, string name, string address) 
     { 
      Student std = GetStudent(studentId); 

      LinqDemoDbDataContext db = Factory.DB; 

      std.Name = name; 
      std.Address = address; 

      db.SubmitChanges(); 
     } 

in diesem Fall i Student Details aktualisieren möchten.

es löste mein Problem. Aber jetzt ist die Frage.

Ist es eine gute Methode, über die Technik in Web-basierte Anwendung zu verwenden ???

Antwort

7

Ist es eine gute Methode, über die Technik in Web-basierte Anwendung zu verwenden ???

Nein. DataContext ist nicht threadsicher. Sie können nicht einen DataContext zwischen den verschiedenen Threads freigeben, die unterschiedliche Anforderungen sicher behandeln.

auch - dieses Muster wird als Singleton, nicht Fabrik

+0

+1 - Dieser Artikel auch einige der Gefahren und die Gründe beschrieben, warum nicht die „global“ Datacontext-Lösung zu verwenden: http://blog.codeville.net/2007/11/29/linq-zu-sql-the-multi-tier-story / –