我正在重构一些基于DbProviderFactory
连接池的旧代码,但我遇到了一个简单的问题:DbProviderFactories.GetFactory()
线程安全返回的对象吗?
现在的代码是这样的:
DbProviderFactory factory = DbProviderFactories.GetFactory("Provider String from config");
var connection = factory.CreateConnection();
connection.ConnectionString = "connection string from config";
等等,等等。但这是每线程一次。显然不是我想要的。
我想知道我是否可以在任何地方使用“工厂”对象?我可以在同一个DbProviderFactory
对象的不同线程中创建多个连接吗?我可以DbAdapter
再次从同一个工厂创建类吗?
尽管它很愚蠢,但即使是具体子类的 MSDN 文档也没有说明您是否可以这样做。例如,该方法的msdn文档没有说明它是否是线程安全的。互联网上的一些不同指南只是打开一个实例,它会做线程池,这很好,但如果你这样做:SqlClientFactory
CreateDataAdapter()
SqlConnection
SqlConnection connection = new SqlConnection("my connection string);
DbDataAdapter adapt = DbProviderFactories.GetFactory(connection).CreateDataAdapter();
那是线程安全的吗?这些工厂有多少?GetFactory
那里的方法跨线程返回什么?总是同一个对象?或不?我正在修改的现有代码DbDataAdapter
大量使用 s,所以我也不想更改所有这些。
那么获取工厂并从多个线程中使用它是线程安全的吗?