首页 > 解决方案 > 如何在 .NET MVC Core 5 中将 WebMatrix 方法与 Npgsql 一起使用

问题描述

我想使用 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 读取配置。我试过根据

添加没有 App.Config 的 DbProviderFactory

在代码中

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

根据 doc 它必须存在:

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-mvcasp.net-corenpgsql.net-5dbproviderfactories

解决方案


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

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

此外,WebMatrix 是一项已停产的旧技术,其正式支持已于 2017 年 11 月 1 日结束。因此,您不太可能让它在 .NET 5 上运行。


推荐阅读