使用EntityFramework for C#连接到远程PostgreSQL数据库时遇到问题。我可以使用pgAdmin,“SQL Manager for PostgreSQL”(来自EMS,www.pgsqlmanager.com)和经典的NpgsqlConnection(我可以读取数据并使用sqlcommands来插入/修改/删除数据)来连接数据库。
但是当我尝试使用EntityFramework时,我收到了消息:
“提供程序未返回ProviderManifestToken字符串。”
“致命:28000:没有pg_hba.conf条目为主机\”... \“,用户\”... \“,数据库\”... \“,SSL关闭”
我在“http://www.elephantsql.com/docs/appharbor.html”上尝试过这个解决方案但是没有用。在“return ManifestToken”上放置一个断点表明,即使执行了“this.AddDependencyResolver(...)”,也不会执行此代码。
连接打开,因为“(我的上下文实例).Database.Connection.Open();”不会抛出任何异常。
我已尝试使用以下软件包/库组合的代码:
以上都没有(PostgreSQL服务器是8.3)。
代码适用于复制的MySql远程数据库。
我的猜测是,有些PostgreSQL库试图查询服务器的受限区域,不应该。其他客户完美无缺地工作。
部分代码:
// This work
using (MyContextClass dbInstance = new (MyContextClass(new NpgsqlConnection(pgConnectionString))))
{
dbInstance.Database.Connection.Open();
dbInstance.Database.Connection.Close();
using(NpgsqlConnection pgCon = new NpgsqlConnection(dbInstance.Database.Connection.ConnectionString))
{
using(DataTable dt = new DataTable())
{
using(NpgsqlDataAdapter pgAdapter = new NpgsqlDataAdapter("select * from someTable", pgCon))
{
pgTeste.Open();
pgAdapter.Fill(dt);
pgTeste.Close();
Assert.IsTrue(dt.Rows.Count > 1); // ok
}
}
}
}
// This doesn't
using (MyContextClass dbInstance = new (MyContextClass(new NpgsqlConnection(pgConnectionString))))
{
var lst = dbInstance.SomeTableDataSet.ToList(); // Throws exception!!!
}
// This works perfectly
using (MyContextClass dbInstance = new (MyContextClass(new MySqlConnection(myConnectionString))))
{
var lst = dbInstance.SomeTableDataSet.ToList();
Assert.IsTrue(lst.Count > 1); // ok
}