首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用.NET 5.0的Npgsql

使用.NET 5.0的Npgsql
EN

Stack Overflow用户
提问于 2022-04-24 07:01:58
回答 2查看 343关注 0票数 0

如果有人知道如何将Npgsql.NET 5.0一起使用,我想知道。在.net Framework (4.8)下,它非常方便,也没有问题。但在.NET 5.0或6.0下,我做不到。

更新:对不起。这是问题所在。

当我尝试使用NpgSQL包时,我将面临以下异常:

{“在已注册的.NET数据提供程序列表中找不到指定的不变名称'Npgsql‘”}。

  • App.config文件(完全相同的文件在.NET Framework4.8下工作):

失败

代码语言:javascript
复制
  <system.data>
    <DbProviderFactories>
      <remove invariant="Npgsql" />
      <add name="Npgsql Data Provider" invariant="Npgsql" description=".Net Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" support="FF" />
    </DbProviderFactories>
  </system.data>
  
  <entityFramework>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, EntityFramework6.Npgsql" />
    </providers>
    <defaultConnectionFactory type="Npgsql.NpgsqlConnectionFactory, EntityFramework6.Npgsql" />
  </entityFramework>

直接在代码中的

也失败

代码语言:javascript
复制
        public MainWindow()
        {
            InitializeComponent();


            try
            {
                using (DbConnection connection = CreateDbConnection("Npgsql", "host = localhost; port = 5432; database = MyDatabas; user id = MyUser; password = MyPassword"))
                {
                    if (connection != null)
                    {
                        connection.Open();
                        connection.Close();
                        label1.Content = "CreateDbConnection Ok";
                    }
                    else
                        label1.Content = "CreateDbConnection Failed";
                }
                return;
            }
            catch (Exception ex)
            {
                label1.Content = ex.Message;
                return;
            }
        }


        static DbConnection CreateDbConnection(
            string providerName, string connectionString)
        {
            // Assume failure.
            DbConnection connection = null;

            // Create the DbProviderFactory and DbConnection.
            if (connectionString != null)
            {
                try
                {
                    DbProviderFactory factory =
                        DbProviderFactories.GetFactory(providerName);

                    connection = factory.CreateConnection();
                    connection.ConnectionString = connectionString;
                }
                catch (Exception ex)
                {
                    // Set the connection to null if it was created.
                    if (connection != null)
                    {
                        connection = null;
                    }
                    Console.WriteLine(ex.Message);
                }
            }
            // Return the connection.
            return connection;
        }

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2022-04-24 09:42:03

.NET 5+ (和.NET Core)不再使用App.config了。虽然您仍然可以通过System.Configuration访问System.Configuration,但DbProviderFactories不再自动填充。

如果您只是想使用Npgsql,可以在代码中直接实例化NpgsqlConnection (new NpgsqlConnection()而不是factory.CreateConnection())。如果您希望使用DbProviderFactories来支持多个驱动程序,则需要在程序开始时预先注册Npgsql的DbProviderFactory,如下所示:

代码语言:javascript
复制
DbProviderFactories.RegisterFactory("Npgsql", NpgsqlFactory.Instance);
票数 0
EN

Stack Overflow用户

发布于 2022-04-24 12:32:39

好的,

这个问题是我上一篇文章WPF : Use NpgSQL Entity Framework的延伸。

现在,在Shay Rojansky的帮助下,它工作得很好。

  • 像前面的文章一样配置App.config文件(上面的链接)。
  • 在使用它之前添加下面的行来注册提供者。

DbProviderFactories.RegisterFactory("Npgsql",NpgsqlFactory.Instance);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71986199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档