2009-11-06 44 views
1

我有一个类为实体提供了CRUD操作。我使用上下文作为私有成员访问类中的所有方法。在实体框架中处理上下文

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

所以,如果我首先调用一个实例的加载方法,然后保存方法,那不好?为什么? – user137348 2009-11-06 19:20:42

+0

不,我的意思是,如果你自己创建线程(而不是为请求创建的那些asp.net),那么它的坏,也就是说,它可能仍然是加载时,已经达到保存...更常见的是,你正试图同时加载具有相同上下文实例的多个事物。它完美的k,在常规的asp.net请求期间使用相同的实例来加载内容和l8r保存。 – eglasius 2009-11-06 19:24:59

1

上下文不是线程安全的。

  1. 您更改的CustomerService处置语境:如果

    您当前的代码是好的。

  2. 每个请求使用一个CustomerService。
+0

什么是最好的方法来实现这?一些如何自动执行.. – user137348 2009-11-06 21:31:32

+0

在服务的基类或服务接口上实现IDisposable,并在那里处理上下文清理,或者如果您希望每个请求都有一个上下文,则可以使用检查HttpContext的方法创建静态助手类.Current用于上下文的一个实例,如果可用,则使用它,否则创建一个新的上下文并将其添加到当前上下文中。如果你想在网络世界以外的功能,你可以考虑附加到当前的线程。 – AldenHurley 2009-12-09 01:33:13