【问题标题】:How to use WebMatrix methods with Npgsql in .NET MVC Core 5如何在 .NET MVC Core 5 中将 WebMatrix 方法与 Npgsql 一起使用
【发布时间】:2020-12-27 11:05:49
【问题描述】:

我想使用 WebMatrix.Data 命名空间

#region Assembly WebMatrix.Data, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
// .. \packages\Microsoft.AspNet.WebPages.Data.3.2.7\lib\net45\WebMatrix.Data.dll

在 ASP MVC Core 5 中使用 Npgsql 数据提供程序。

在 web.config 中定义为

<system.data>
  <DbProviderFactories>
    <clear />
    <add name="Npgsql Data Provider" invariant="Npgsql"
  support="FF" description=".Net Framework Data Provider for Postgresql Server"
  type="Npgsql.NpgsqlFactory, Npgsql" />
  </DbProviderFactories>
</system.data>

.NET 5 不会从 web.config 读取配置。 我试过了

Add a DbProviderFactory without an App.Config

在代码中

System.Data.Common.DbProviderFactories.RegisterFactory("NpgSql", Npgsql.NpgsqlFactory.Instance);

但出现编译错误 RegisterFactory 方法不存在。 VS2019 程序集查看器证实了这一点:

#region Assembly System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
// C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Data.dll
#endregion

namespace System.Data.Common
{
    public static class DbProviderFactories
    {
        public static DbProviderFactory GetFactory(string providerInvariantName);
        public static DbProviderFactory GetFactory(DataRow providerRow);
        public static DbProviderFactory GetFactory(DbConnection connection);
        public static DataTable GetFactoryClasses();
    }
}

根据文档它必须存在:

https://docs.microsoft.com/en-us/dotnet/api/system.data.common.dbproviderfactories.registerfactory?view=net-5.0#System_Data_Common_DbProviderFactories_RegisterFactory_System_String_System_Data_Common_DbProviderFactory_

.NET MVC Core 5 中如何在 WebMatrix 中使用 Postgres 数据库?

【问题讨论】:

    标签: asp.net-mvc asp.net-core npgsql .net-5 dbproviderfactories


    【解决方案1】:

    看来您的目标是 .NET Framework 4.8,而不是 .NET 5

    // C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Data.dll

    此外,WebMatrix 是一项已停产的旧技术,其正式名称为support has ended on November 1st, 2017。所以你不太可能让它在 .NET 5 上运行。

    【讨论】:

    • 我的应用程序面向 .NET 5。我还有其他 MVC,面向 .NET 4.8。在这种情况下,它可以工作。如果从 .NET 5 调用,Npgsql 必须从代码中注册才能在 .NET 5 中工作。
    猜你喜欢
    • 2018-08-30
    • 2021-05-03
    • 2023-03-14
    • 2016-11-13
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    相关资源
    最近更新 更多