我正在努力通过Entity Framework 6以编程方式建立到PostgreSQL的连接。 我有这个类:
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注册为数据库提供程序的方法:
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(请参见此问题的被接受答案的评论)。由于该程序用作插件,因此必须保持这种方式,它不会(也不应该)独立运行。提前致谢。
new DbContext(new System.Data.Entity.Core.EntityClient.EntityConnection(buildConnectionString()), true)
吗?这个 DbContext 构造函数可能不支持指定提供程序。 - jjj