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