代码之家  ›  专栏  ›  技术社区  ›  Miamy Dan Barrett

.net核心应用程序和mashine.config中的DBProviderFactorys为空

  •  0
  • Miamy Dan Barrett  · 技术社区  · 6 年前

    `DataTable table = DbProviderFactories.GetFactoryClasses();` 
    

    在以.NET Framework 4.x和.NET Core 2.x为目标的应用程序中工作方式不同。

    我读过类似的问题,发现提供者列表存储在 mashine.config 文件(我有控制台应用程序,所以我没有 web.config app.config 几乎为空的文件)。所以我认为我的问题与

    mashine.config 我桌面上的文件。

    c:\Windows\Microsoft.NET\Framework\ v2.0.50727 c:\Windows\Microsoft.NET\Framework64\ v2.0.50727 \CONFIG\machine.CONFIG v4.0.30319 \Config\machine.Config v4.0.30319 \Config\machine.Config \amd64_netfx-machine_config_ocm_b03f5f7f11d50a3a_6.1.7601.17514_none_81fa0191bdd08961\machine.config c:\Windows\ winsxs \x86_netfx-machine_config_ocm_b03f5f7f11d50a3a_6.1.7601.17514_none_c9a73868d24cb267\machine.config

    文件夹中的文件 winsxs 有“完整”部分

       <system.data>
            <DbProviderFactories>
               <add name="Odbc Data Provider"         invariant="System.Data.Odbc"         description=".Net Framework Data Provider for Odbc"      type="System.Data.Odbc.OdbcFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
               <add name="OleDb Data Provider"        invariant="System.Data.OleDb"        description=".Net Framework Data Provider for OleDb"     type="System.Data.OleDb.OleDbFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
               <add name="OracleClient Data Provider" invariant="System.Data.OracleClient" description=".Net Framework Data Provider for Oracle"    type="System.Data.OracleClient.OracleClientFactory, System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
               <add name="SqlClient Data Provider"    invariant="System.Data.SqlClient"    description=".Net Framework Data Provider for SqlServer" type="System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
            </DbProviderFactories>
        </system.data>
    

    但是来自 v4.0.30319

    <system.data>
        <DbProviderFactories/>
    </system.data>
    

    我可以在两台电脑上看到它,所以我认为我的Windows或NET安装没有损坏。

    1. DbProviderFactories mashine.config 文件位于 v4.0.30319
    2. 为什么这个列表是空的?我的意思是,什么软件负责它的填充?我是否需要安装/添加/恢复某些内容?
    3. 手动将提供者列表添加到此文件(仅从“完整列表”文件复制)是否安全?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Miamy Dan Barrett    6 年前

    我决定把答案贴出来,因为这个话题对我来说真的不清楚,我希望我能帮助任何人避免我的错误。

    使用EF Core,我们可以在VS Package Manager控制台中基于现有数据库构建模型(好的,我们也可以使用dotnet CLI,但对我来说,使用前者更容易)。我们需要通过NuGet Manager添加所需的DB提供程序。

    我喜欢这里的漂亮教程: http://www.entityframeworktutorial.net/efcore/entity-framework-core.aspx

    也, here DbProviderFactory 动态加载(这是我问题的起点)。