Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 声明静态、非静态、私有或公共数据库上下文的含义是什么?_C#_Asp.net Mvc_Ado.net - Fatal编程技术网

C# 声明静态、非静态、私有或公共数据库上下文的含义是什么?

C# 声明静态、非静态、私有或公共数据库上下文的含义是什么?,c#,asp.net-mvc,ado.net,C#,Asp.net Mvc,Ado.net,将数据库上下文ex:mydbEntities声明为以下内容之一(在每种情况下)的含义是什么: publicstaticmydbEntities db=newmydbentities() publicmydbEntities db=新的mydbEntities() 私有静态mydbEntities db=新的mydbEntities() privatemydbEntities db=新的mydbEntities() 我正在使用ASP.NETMVC2。 谢谢大家! 静态在这里会非常糟糕。数据上下文不

将数据库上下文ex:mydbEntities声明为以下内容之一(在每种情况下)的含义是什么:

  • publicstaticmydbEntities db=newmydbentities()

  • publicmydbEntities db=新的mydbEntities()

  • 私有静态mydbEntities db=新的mydbEntities()

  • privatemydbEntities db=新的mydbEntities()

  • 我正在使用ASP.NETMVC2。
    谢谢大家!

    静态
    在这里会非常糟糕。数据上下文不能很好地处理线程,每次您都希望将其丢弃以避免过度使用。可以使用与当前http上下文相关的静态属性。这也许有道理。那么它只是一个公共静态属性

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


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

    这实际上是一个Ling2SQL问题,而不是一个ASP.NETMVC问题(我假设这就是您正在使用的,或者可能是实体框架)

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

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

    …然后像这样取回它

    MyDataContext=HttpContext.Current.Items[“myKey”]作为MyDataContext


    您可能应该创建一些帮助器类,以便更轻松地访问DataContext,并将这些代码隐藏起来。

    为什么要问这个问题?您想要实现什么?不要对实例数据使用静态数据。它不是线程安全的,特别是在IIS中。我有一个DisplayObjectModel,用于将对象“馈送”到视图。我一直使用“私有静态mydbEntities db=new mydbEntities();”,它可以工作。我是一个新手,我只是从某个地方模仿了这个风格,所以。。。为什么总是“私有静态”?我什么时候可以使用其他应用程序?我是在asp.net-mvc应用程序的上下文中问这个问题的。让我更具体一点。。。我通常在控制器上下文中创建一个“private oddeedbenties db=new oddeedbenties();”,并在该控制器的操作中使用它。这样行吗?将其公开的含义是什么?basilmir:您能否确认您是否正在使用Linq 2 SQL?我没有使用Linq 2 SQL。我正在使用ADO.net Entity Framework.Ok。我想我明白了。所以静态是不好的,因为“线程”问题。我是在asp.net-mvc应用程序的上下文中问这个问题的。让我更具体一点。。。我通常在控制器类中创建一个“private oddeedbenties db=new oddeedbenties();”,并在该控制器的操作中使用它。这样行吗?将其公开的含义是什么?@basilmir-通常应避免使用公共字段-尽可能使用更好的属性(几乎总是这样)。但只要它不是静态的,无论哪种方式都不会有太大的影响。属性的好处在于,例如,您可以执行延迟初始化,因此只有在(或:if)您实际需要数据上下文时才能获取数据上下文,即
    get
    发现字段为空时。