如何从连接中使用实体框架+ 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为应用程序指定的任何其他提供程序。 
上一篇: How to use Entity Framework + PostgreSQL from connection?
