Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.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# 在ASP.NETMVC中管理MongoDB连接的正确方法是什么?_C#_Asp.net_Asp.net Mvc_Mongodb_Mongodb .net Driver - Fatal编程技术网

C# 在ASP.NETMVC中管理MongoDB连接的正确方法是什么?

C# 在ASP.NETMVC中管理MongoDB连接的正确方法是什么?,c#,asp.net,asp.net-mvc,mongodb,mongodb-.net-driver,C#,Asp.net,Asp.net Mvc,Mongodb,Mongodb .net Driver,管理MongoServer类生命周期的最佳实践是什么?我应该创建一个并在每个请求结束时关闭它,还是应该使用StructureMap之类的东西在应用程序的整个生命周期中将其作为一个单例保存 非常感谢您的帮助。使用任何IOC容器(structuremap、Windsor等)注入它,并使其生命周期保持在每个请求的基础上。其中指出,MongoServer、MongoDatabase和MongoCollection是线程安全的,您应该为连接到的每个数据库创建一个MongoServer 因此,MongoSe

管理MongoServer类生命周期的最佳实践是什么?我应该创建一个并在每个请求结束时关闭它,还是应该使用StructureMap之类的东西在应用程序的整个生命周期中将其作为一个单例保存


非常感谢您的帮助。

使用任何IOC容器(structuremap、Windsor等)注入它,并使其生命周期保持在每个请求的基础上。

其中指出,
MongoServer
MongoDatabase
MongoCollection
是线程安全的,您应该为连接到的每个数据库创建一个
MongoServer

因此,
MongoServer
MongoDatabase
MongoCollection
可以安全地配置为单例
MongoServer
甚至可以通过为后续调用返回相同的
MongoDatabase
实例来帮助实现这一点,而
MongoDatabase
也可以为
MongoCollection
执行相同的操作

也就是说,您的
MongoServer
实例可以安全地配置为在您的IoC容器中拥有单一生活方式,您还可以为
MongoDatabase
甚至
MongoCollection
设置注入

我自己也在温莎使用这种策略-你可以在这里看到我的
MongoInstaller
:-它允许我的课程继续进行并执行以下操作:

public class SomeClass
{
    public SomeClass(MongoCollection<Person> people)
    { ... }
}
公共类SomeClass
{
公共类(MongoCollection人员)
{ ... }
}
为了注入一个集合,这个集合很好,可以随时使用。

C#驱动程序自动管理到服务器的连接(它使用一个连接池)。无需调用服务器。在驱动程序自动连接时进行连接。不要呼叫服务器。断开连接,因为这会关闭连接池中的所有连接并干扰有效的连接池


就管理MongoServer实例的生命周期而言,您可以自由地将其存储在静态变量中,并在流程的生命周期中使用它(并跨线程共享它,这是线程安全的)。或者,只要在需要获取服务器实例时调用MongoServer.Create即可。只要您继续调用MongoServer.Create,并使用相同的连接字符串,您将继续返回相同的MongoServer实例。

这意味着为每个请求线程创建一个服务器实例。我假设驱动程序处理连接池。正确吗?是的,
MongoServer
管理一个连接池,不能反复实例化。有关详细信息,请参见(“您将为连接到的每台服务器创建一个此类实例。到服务器的连接在后台自动处理(连接池用于提高效率)。”)感谢您共享WindsorInstaller。代码现在有点旧了,我想知道您是否有新mongodriver 2.0的更新版本?我试图自己升级,但我不确定是否有更好的方法`