Asp.net 静态方法是否适用于Linq到SQL DAL?

Asp.net 静态方法是否适用于Linq到SQL DAL?,asp.net,linq-to-sql,multithreading,data-access-layer,static-methods,Asp.net,Linq To Sql,Multithreading,Data Access Layer,Static Methods,我在DAL中使用LINQtoSQL,并听说过关于在web应用程序中使用静态方法的各种事情(关于线程/并发问题)。目前,我创建了一个测试DAL,它似乎运行良好。但是,由于它是静态的,所以我创建它的方式有什么问题吗 public static class TestDAL { public static bool GetUserAddress(string username) { testDBDataContext dbCon

我在DAL中使用LINQtoSQL,并听说过关于在web应用程序中使用静态方法的各种事情(关于线程/并发问题)。目前,我创建了一个测试DAL,它似乎运行良好。但是,由于它是静态的,所以我创建它的方式有什么问题吗

    public static class TestDAL
    {


        public static bool GetUserAddress(string username)
        {
            testDBDataContext dbContext = new testDBDataContext();
            //Linq code goes here

        }


        public static void InsertUserNumber(int userID)
        {
            testDBDataContext dbContext = new testDBDataContext();
            //...
            dbContext.UserDetails.InsertOnSubmit(nUser);
            dbContext.SubmitChanges();

        }

       //etc... All the methods are created in the same way 


    }
这种方法适合web应用程序,还是在生产环境中会出现问题


谢谢。

就我个人而言,我会避免使用静态方法,因为这会使代码更难测试。在测试使用DAL的代码时,您将无法轻松模拟DAL。请注意,这不是LINQ或数据访问层所独有的,它只是代码作为类方法而不是实例方法的函数。

只要您的静态方法不使用任何共享状态(类级别状态或其他全局状态),它们本身就不会在多线程环境中运行造成任何问题。每个静态方法调用都将创建其自身局部变量的副本。

从您提供的代码片段中,不太清楚各种方法的作用。在我看来,只要你使用局部变量,它是安全的。

你听说过关于线程/并发的什么事情吗?@ScottE:我从来没有听说过任何非常详细的事情(部分原因是我决定在这里提问),但我记得看到一篇帖子声称可能存在一个用户的数据与另一个用户的数据混合的问题,因为他们同时访问了DAL方法。@杰夫:谢谢你的回复。不,这些方法在这方面是非常独立的。我只记得看过几篇L2S文章,它们似乎有一个非静态类,只有一个DataContext实例(其他方法使用)。我只是想确保我的方法不会有问题,因为每个方法都会创建新的DataContext。如果一个方法调用另一个方法,那么这会被视为共享的变量吗(其中任何一个方法也可以单独调用)?或者每个方法仍然会创建它们自己的局部变量吗?静态方法可以相互调用而不会引起线程问题,只要两个方法都只使用局部变量(和方法参数)。要了解在多线程环境(如web应用程序)中运行时的风险以及可能出现的问题,我建议阅读Joseph Albahari经常推荐的“C#中的线程”(at)和Jon Skeet的“.NET中的多线程”(Multi-Threading in.NET)。谢谢Jeff,这些都很棒links@tvanfosson:谢谢你的建议。当前的项目非常小,所以测试不是决定因素。不过,在处理更大的项目时,我一定会记住实例方法。@Darin:谢谢你的回复。其他方法非常通用,但它们都不共享任何全局变量。