DbProviderFactories
Одна из больших новых особенностей ADO.NET 2.0 это использование отражения как средства экземплирования поставщиков БД программно. Информация, используемая .NET, чтобы перечислить доступных провайдеров данных в системе относительно проста. Это просто смотрит в machine.config и в вашем собственном файле app.config некоторые данные XML, чтобы сказать, какие поставщики устанавливаются и в каких assemblies те поставщики находятся.
Сценарий 1: Независимая версия (не использует Global Assembly Cache)
Этот метод позволяет вам пропускать любую новую версию System.Data.SQLite.DLL в папку вашего приложения и использовать без любых кодовых модификаций или перекомпилирования. Добавьте следующий код к своему файлу app.config:
<configuration>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite"/>
<add name="SQLite Data Provider" invariant="System.Data.SQLite"
description=".NET Framework Data Provider for SQLite"
type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
</DbProviderFactories>
</system.data>
</configuration>
Сценарий 2: Зависит от версии, используя DLL, расположенный в той же самой папке, где приложение, или Global Assembly Cache
Этот метод подробно останавливается на вышеупомянутом XML, чтобы обеспечить номер версии и ключевой символ SQLite DLL, таким образом, это может находиться в той же самой папке, как приложение, или в GAC. Оборотная сторона в том, что DbProviderFactories будет использовать эту информацию о версии, чтобы загрузить только определенную версию. Это означает, что если вы обновляете DLL, необходимо также обновить этот XML.
<configuration>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite"/>
<add name="SQLite Data Provider" invariant="System.Data.SQLite"
description=".NET Framework Data Provider for SQLite"
type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite,
Version=1.0.118.0, Culture=neutral,
PublicKeyToken=db937bc2d44ff139"/>
</DbProviderFactories>
</system.data>
</configuration>
Следующий код C# демонстрирует SQLite через DbProviderFactories:
DbProviderFactory fact = DbProviderFactories.GetFactory("System.Data.SQLite");
using (DbConnection cnn = fact.CreateConnection())
{
cnn.ConnectionString = "Data Source=test.db3";
cnn.Open();
}