【发布时间】:2023-03-23 10:40:02
【问题描述】:
我正在使用 Entity Framework 6 以编程方式建立与 PostgresSQL 的连接。我有这个类:
public class ClearspanDatabaseContext : DbContext
使用这个构造函数:
public ClearspanDatabaseContext()
: base(buildConnectionString())
{
}
这是以编程方式生成连接字符串的静态方法:
private static string buildConnectionString()
{
RegisterDbProvider("Npgsql", ".Net Framework Data Provider for Postgresql", "Npgsql Data Provider", "Npgsql.NpgsqlFactory, Npgsql");
EntityConnectionStringBuilder entityConnectionStringBuilder = new EntityConnectionStringBuilder();
entityConnectionStringBuilder.Provider = "Npgsql";
entityConnectionStringBuilder.ProviderConnectionString = "host=192.168.168.140;Port=5432;username=ClearspanDevLogin;password=*******;database=ClearspanWebServerDev";
return entityConnectionStringBuilder.ToString();
}
这是将 Npgsql 注册为数据库提供程序的方法,取自 source:
public static bool RegisterDbProvider(string invariant, string description, string name, string type)
{
try
{
DataSet ds = ConfigurationManager.GetSection("system.data") as DataSet;
foreach (DataRow row in ds.Tables[0].Rows)
{
if (row["InvariantName"].ToString() == invariant)
{
return true;
}
}
ds.Tables[0].Rows.Add(name, description, invariant, type);
return true;
}
catch
{
}
return false;
}
这会生成一个这样的字符串:
"provider=Npgsql;provider connection string=\"host=192.168.168.140;Port=5432;username=ClearspanDevLogin;password=********;database=ClearspanWebServerDev\""
但我得到一个ArgumentException:
不支持关键字:'provider'。
我认为我接近编程连接,但缺少一些小东西。我可以做些什么来解决此异常并以编程方式正确设置此连接?没有 app.config 答案,我在一个忽略 app.config 的类库中工作(请参阅此question 已接受答案的 cmets)。该程序必须保持这种状态,因为它被用作插件 - 它不会(也不应该)自行运行。提前致谢。
【问题讨论】:
-
你试过
new DbContext(new System.Data.Entity.Core.EntityClient.EntityConnection(buildConnectionString()), true)吗?该 DbContext 构造函数可能不支持指定提供者。
标签: entity-framework database-connection entity-framework-6 connection-string npgsql