如何从连接中使用实体框架+ PostgreSQL?

我已经看到线程讨论使用实体框架和PostgreSQL的官方说明。 这些说明需要为每次安装运行gacutil ,而这对于部署而言并不那么方便。

我想在这里做的是将PostgreSQL连接直接传递给DbContext构造函数。 这对我来说已经足够了,因为我将在没有设计CodeFirst情况下使用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提供app/web.config 。 请参见3.4使用Npgsql与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>

确保版本与您部署的Npgsql程序集的版本完全匹配(或只是省略Version / Culture / PublicKeyToken)。 如果在已经在machine.config输入了Npgsql的计算机上运行,​​则可以使用<Clear />来避免冲突。 没有明确的你会得到一个例外。 但是,这也假设您不依赖machine.config为应用程序指定的任何其他提供程序。

链接地址: http://www.djcxy.com/p/61267.html

上一篇: How to use Entity Framework + PostgreSQL from connection?

下一篇: transition between page changes