如果有人知道如何将Npgsql与.NET 5.0一起使用,我想知道。在.net Framework (4.8)下,它非常方便,也没有问题。但在.NET 5.0或6.0下,我做不到。
更新:对不起。这是问题所在。
当我尝试使用NpgSQL包时,我将面临以下异常:
{“在已注册的.NET数据提供程序列表中找不到指定的不变名称'Npgsql‘”}。
失败
<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>直接在代码中的
也失败
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;
}谢谢你的帮助。
发布于 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,如下所示:
DbProviderFactories.RegisterFactory("Npgsql", NpgsqlFactory.Instance);发布于 2022-04-24 12:32:39
好的,
这个问题是我上一篇文章WPF : Use NpgSQL Entity Framework的延伸。
现在,在Shay Rojansky的帮助下,它工作得很好。
DbProviderFactories.RegisterFactory("Npgsql",NpgsqlFactory.Instance);
https://stackoverflow.com/questions/71986199
复制相似问题