Entity framework 4 如何使用实体框架&x2B;来自连接的PostgreSQL?

Entity framework 4 如何使用实体框架&x2B;来自连接的PostgreSQL?,entity-framework-4,postgresql-9.1,npgsql,Entity Framework 4,Postgresql 9.1,Npgsql,我已经看到过一些讨论实体框架和PostgreSQL使用的帖子,并附有官方说明。这些指令需要在每次安装时运行gacutil,这对于部署目的来说并不那么方便 这里我要做的是将PostgreSQL连接直接传递给DbContext构造函数。这对我来说已经足够了,因为我将在没有设计器的情况下使用CodeFirst。我就是这么做的: public class Context : DbContext { Context(System.Data.Common.DbConnection connectio

我已经看到过一些讨论实体框架和PostgreSQL使用的帖子,并附有官方说明。这些指令需要在每次安装时运行
gacutil
,这对于部署目的来说并不那么方便

这里我要做的是将PostgreSQL连接直接传递给
DbContext
构造函数。这对我来说已经足够了,因为我将在没有设计器的情况下使用
CodeFirst
。我就是这么做的:

public class Context : DbContext
{
    Context(System.Data.Common.DbConnection connection)
        : base(connection, true)
    {
    }

    public static Context CreateContext()
    {
        NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;User Id=postgres;Password=********;Database=xxx;");
        conn.Open();

        return new Context(conn);
    }
}
但使用此方法,我会得到一个带有消息的
NotSupportedException

无法确定类型为的连接的提供程序名称 “Npgsql.NpgsqlConnection”


我该怎么办?

您需要在
app/web.config
中注册Npgsql提供程序。请参阅Npgsql手册的一节

当您为数据库(MySQL、PostgreSQL等)安装ADO.NET提供程序时,安装程序通常会在GAC中注册提供程序程序集,并向
machine.config
添加一个条目。如果要在不安装提供程序的情况下进行部署,则需要包括提供程序程序集的副本(将Npgsql程序集引用设置为项目的本地副本),并向应用程序的
app/web.config
中添加一个条目,如下所示:


...
...
确保版本与部署时使用的Npgsql程序集的版本完全匹配(或者省略版本/区域性/PublicKeyToken)。如果在其
machine.config
中已经有Npgsql条目的机器上运行,则可以使用
来避免冲突。如果没有清除,你会得到一个例外。但是,这也假设您的应用程序不依赖于
machine.config
中指定的任何其他提供程序