2012-07-04 4 views
7

Я уже видел темы обсуждения использования Entity Framework и PostgreSQL с официальными инструкциями. Эти инструкции должны запускать gacutil для каждой установки, которая не так удобна для развертывания.Как использовать Entity Framework + PostgreSQL из соединения?

Что я хочу сделать, это передать соединение 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.

Что мне делать?

+0

Кажется, для меня работает – user007

ответ

4

Вам необходимо зарегистрировать поставщика Npgsql в app/web.config. См. Раздел 3.4 Using Npgsql with ProviderFactory руководства Npgsql.

Когда вы устанавливаете провайдера ADO.NET для баз данных (MySQL, PostgreSQL и т. Д.), Установщики обычно регистрируют сборку поставщика в GAC и добавляют запись в machine.config. Если вы хотите развернуть без необходимости установки провайдера, вам нужно будет указать копию сборки поставщика (установите ссылку на сборку Npgsql как Copy Local для своего проекта) и добавьте запись в свою заявку 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). <Clear /> существует, чтобы избежать конфликтов при запуске на машине, которая уже имеет запись для Npgsql в своем machine.config. Без четкого вы получите исключение. Тем не менее, это также предполагает, что вы не полагаетесь на других поставщиков, указанных в machine.config для вашего приложения.

 Смежные вопросы

  • Нет связанных вопросов^_^