mel*_*lmi 7 npgsql entity-framework-4 postgresql-9.1
我已经看到线程讨论使用Entity Framework和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);
}
}
Run Code Online (Sandbox Code Playgroud)
但是使用这种方法,我收到了一条NotSupportedException消息:
无法确定连接类型为"Npgsql.NpgsqlConnection"的提供程序名称.
我该怎么办?
您需要在app/web.config. 请参阅Npgsql 手册的第3.4 节将 Npgsql 与 ProviderFactory 结合使用。
当您安装数据库(MySQL、PostgreSQL 等)的 ADO.NET 提供程序时,安装程序通常会在 GAC 中注册提供程序程序集并向machine.config. 如果您想在不安装提供程序的情况下进行部署,则需要包含提供程序程序集的副本(将项目的 Npgsql 程序集引用设置为“复制本地”),并向应用程序添加一个条目,如下所示app/web.config:
<configuration>
...
<system.data>
<DbProviderFactories>
<clear />
<add name="Npgsql Data Provider" invariant="Npgsql" support="FF" description=".Net Framework Data Provider for Postgresql Server" type="Npgsql.NpgsqlFactory, Npgsql, Version=2.0.1.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" />
</DbProviderFactories>
</system.data>
...
</configuraiton>
Run Code Online (Sandbox Code Playgroud)
确保版本与您部署的 Npgsql 程序集的版本完全匹配(或者只是省略 Version/Culture/PublicKeyToken)。如果<Clear />在其machine.config. 如果没有明确的说明,您将得到例外。但是,这还假设您不依赖于machine.config您的应用程序中指定的任何其他提供程序。
| 归档时间: |
|
| 查看次数: |
7120 次 |
| 最近记录: |