2009-06-12 3 views
1

내 프로젝트에서 몇 가지 문제가 있습니다. 엔티티를 업데이트하려고하면 다른 유형의 오류가 발생합니다.LINQ :: 동시 Data Context를 사용하여 동시성 문제 방지

인터넷에서 읽습니다. 내가의 DataContext를 생성하는 방법에서 엔티티 클래스의 객체를 얻고 여기에 또 다른 DataContext를 로컬로 생성되기 때문에 로컬

및 업데이트 방법 ID를 업데이트하지 않습니다 - 이러한 오류는

1 때문이다. 테이블에 타임 스탬프 열을 추가하면 (. 내 프로젝트에 영향을주지 않는 내가이 시도)

일 - 내가이 문제

1

에 관한 많은 기사를 발견

(심지어는 예외를 throw하지 않습니다) 녀석은 모두를 위해 단일 DataContext를 사용한다고 말했다.

은 내가 학생 정보를 업데이트 할이 경우 다음의 클래스

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

를 작성하여 이런 짓을.

내 문제가 해결되었습니다. 그러나 지금 질문은이다.

위의 기술을 웹 기반 응용 프로그램에서 사용하는 것이 좋은 방법일까요 ???

답변

7

웹 기반 응용 프로그램에서 위의 기술을 사용하는 것이 좋은 방법일까요 ???

아니요. DataContext는 스레드로부터 안전하지 않습니다. 서로 다른 요청을 안전하게 처리하는 여러 스레드간에 1 DataContext를 공유 할 수 없습니다. 또한

-이 패턴은 싱글이 아닌 공장

+0

하나라고 -이 문서는 또한 함정과 몇 가지 이유 왜 "글로벌"데이터 컨텍스트 솔루션을 사용하지 설명 : http://blog.codeville.net/2007/11/29/linq-to-sql-the-multi-tier-story / –