2009-11-06 11 views
1

엔티티에 CRUD 작업을 제공하는 클래스가 있습니다. 컨텍스트를 클래스의 모든 메서드에서 액세스 할 수있는 전용 멤버로 사용하고 있습니다.Entity-framework의 컨텍스트 처리

public class CustomerService 
    { 
    private CeoPolandEntities context; 

    public CustomerService() 
    { 
     context = new CeoPolandEntities(); 
    } 


    public bool IsCustomerValid(string userName,string password) 
    { 
     Customer customer; 

     customer = context.CustomerSet.FirstOrDefault(c => c.UserName == userName 
                && c.Password == password); 

     return customer == null ? false : true; 
    } 

    public bool IsUserNameValid(string userName) 
    { 
     Customer customer; 

     customer = context.CustomerSet.FirstOrDefault(c => c.UserName == userName); 

     return customer == null ? true : false; 
    } 
} 

컨텍스트를 사용하면 적절합니까? 스레드 안전하고 concurency 안전한가요 ??

ASP.NET 응용 프로그램입니다.

답변

1

다른 요청을 처리하기 위해 CustomerService의 인스턴스가 다르면 걱정할 필요가 없습니다. 같은 스레드에서 여러 스레드를 호출하는 것을 피하십시오.

+0

그래서 인스턴스를 처음로드 메서드를 호출 한 다음 저장 메서드, 그게 나쁜가요? 왜 ? – user137348

+0

아니, 나는 당신이 스레드 (asp.net 요청을 작성하는 대신)를 작성하는 경우 다음 즉, 그것은 여전히로드를 때려서 이미로드 중일 수 있습니다 ... 더 일반적인 것은 u는 노력하고 있다는 것을 의미합니다 동일한 문맥 인스턴스로 여러 것을 동시에로드하십시오. 그것의 완벽하게 k, 같은 asp.net 요청을로드하는 동안 동일한 인스턴스를 사용하여 물건을 저장하고 18 시간을 절약 할 수 있습니다. – eglasius

1

컨텍스트는 스레드로부터 안전하지 않습니다.

  1. 당신은 문맥을 폐기하기를 CustomerService을 변경하는 경우

    현재 코드는 괜찮습니다.

  2. 요청 당 하나의 고객 서비스를 사용합니다.
+0

이것을 달성하는 가장 좋은 방법은 무엇입니까 ?? 어떻게 자동으로 .. – user137348

+0

IDisposable을 서비스의 기본 클래스 또는 서비스 인터페이스에 구현하고 거기에서 컨텍스트 정리를 처리하거나 요청 당 하나의 컨텍스트를 원할 경우 HttpContext를 검사하는 메서드로 정적 도우미 클래스를 만들 수 있습니다 컨텍스트의 인스턴스에 대한 현재 및 가능한 경우 사용하고, 그렇지 않으면 새 컨텍스트를 만들고 현재 컨텍스트에 추가합니다. 웹 세계 이외의 기능을 원한다면 현재 스레드에 연결할 수 있습니다. – AldenHurley

관련 문제