声明静态,非静态,私有或公共数据库上下文有什么含义?

时间:2010-06-26 20:12:09

标签: c# asp.net-mvc ado.net

将数据库上下文ex:mydbEntities声明为以下任何一种含义(在每种情况下):

  1. public static mydbEntities db = new mydbEntities();

  2. 公开 mydbEntities db = new mydbEntities();

  3. 私有静态 mydbEntities db = new mydbEntities();

  4. 私人 mydbEntities db = new mydbEntities();

  5. 我正在使用ASP.NET MVC 2。 谢谢!

2 个答案:

答案 0 :(得分:2)

static在这里非常糟糕。数据上下文与线程很好地匹配,每次都要丢弃它以避免过度使用。您可以使用与当前http上下文相关的静态属性。 可能有意义。然后它只是一个公共静态属性。

然而,许多人更喜欢IOC和基于实例的上下文;或存储接口后面的上下文。选择是你的。

注意:另一个选项是线程静态的,但假设您的请求的所有由同一个线程提供服务。所以不要这样做。

答案 1 :(得分:0)

这实际上是一个Ling 2 SQL问题而不是ASP.NET MVC问题(我假设你正在使用它,或者它可能是实体框架)。

在Web应用程序中使用L2SQL时,有些人提倡每个Web请求模式使用DataContext。也就是说,您创建一个DataContext并在整个当前正在执行的Web请求期间保留它。为此,您需要将其存储在HttpContext.Items集合中,如此

HttpContext.Current.Items.Add(“myKey”,new MyDataContext());

...并按原样检索

MyDataContext context = HttpContext.Current.Items [“myKey”] as MyDataContext;

您可能应该创建一些帮助程序类,以便更轻松地访问DataContext并隐藏此代码。