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();
}