2009-11-06 5 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; 
    } 
} 

Является ли это правильным использованием контекста? Безопасна ли она безопасно и безопасно?

Его приложение ASP.NET.

ответ

1

До тех пор, пока у вас есть разные экземпляры CustomerService для обработки различных запросов, вам не нужно беспокоиться об этом. Если у вас есть какие-то темы, которые вы создаете сами, избегайте вызова нескольких методов в одном экземпляре.

+0

Итак, если я сначала вызываю метод загрузки, а затем метод save, thats bad? Зачем ? – user137348

+0

нет, я имею в виду, что если вы сами создаете темы (вместо тех, которые создаются asp.net для запроса), то это плохо, т. Е. Может быть, все еще загружается, когда уже нажимают save ... более распространено то, что вы пытаетесь одновременно загружать несколько объектов одним и тем же экземпляром контекста. Его отлично k, чтобы использовать один и тот же экземпляр во время обычного запроса asp.net для загрузки файлов и сохранения l8r. – eglasius

1

Контексты не являются потокобезопасными.

Ваш текущий код является штраф, если:

  1. Вы можете изменить CustomerService отчуждать контекст.
  2. Вы используете один сервис CustomerService для каждого запроса.
+0

Что было бы лучшим способом добиться этого? Некоторые как автоматически .. – user137348

+0

Внедрите IDisposable либо в базовый класс службы, либо в свой служебный интерфейс, и обработайте очистку контекста там, или если вы хотите иметь один контекст для запроса, вы можете создать статический вспомогательный класс с помощью метода, который проверяет HttpContext .Current для экземпляра контекста и, если он доступен, в противном случае создайте новый контекст и добавьте его в текущий контекст. Если вам нужна функциональность за пределами веб-мира, вы можете посмотреть на прикрепление к текущему потоку. – AldenHurley

Смежные вопросы