Entity framework 4 如何使用实体框架&x2B;来自连接的PostgreSQL?
我已经看到过一些讨论实体框架和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
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
中指定的任何其他提供程序