2016-06-15 2 views
2

Я пытаюсь создать базу данных на сервере PostgreSQL, используя Entity Framework Code-First в приложении C#. Я загрузил Npgsql для EF и попытался изменить файл App.config по-разному, представленный в Интернете, однако никто не работает.Подключиться к базе данных PostgreSQL с помощью EntityFramework 6 (C#)

Это мой App.config файл:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </configSections> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> 
    </startup> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
    <providers> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
     <provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, EntityFramework6.Npgsql" /> 
    </providers> 
    </entityFramework> 
    <connectionStrings> 
    <add name="SqlServer" connectionString="Data Source=localhost;Initial Catalog=MyDB;Integrated Security=true" providerName="System.Data.SqlClient" /> 
    <add name="PostgreSql" connectionString="Data Source=localhost;Initial Catalog=MyDB;Integrated Security=true;User Id=postgre;Password=password;" providerName="Npgsql" /> 
    </connectionStrings> 
</configuration> 

Я хотел бы добавить, что SqlServer работы. Я был бы благодарен за помощь.

+0

Если вам нужны оба провайдера в вашем приложении, вам нужно указать EF, который можно использовать для вашего контекста. В противном случае удалите запись SqlServer и измените заводскую фабрику по умолчанию, чтобы она была предоставлена ​​Npgsql. – Spivonious

+0

В конструкторе класса контекста я использую базу («PostgreSql»). Как должен выглядеть по умолчанию? – Niko

+0

Этого должно быть достаточно. Вы получаете какие-либо ошибки при использовании контекста? – Spivonious

ответ

3

Я пробовал различные конфигурации и варианты и, наконец, нашел решение.

соединения струнная секция должна быть как:

<connectionStrings> 
    <add name="SqlServer" connectionString="Data Source=localhost;Initial Catalog=SchoolDB;Integrated Security=true" providerName="System.Data.SqlClient" /> 
    <add name="PostgreSql" connectionString="Server=localhost;Port=5432;User Id=postgres;Password=1234;Database=SchoolDB;" providerName="Npgsql" /> 
    </connectionStrings> 

и поставщиков:

<providers> 
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    <provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, EntityFramework6.Npgsql" /> 
</providers> 

Кроме того, в конце раздела я добавил следующие

<system.data> 
    <DbProviderFactories> 
     <remove invariant="Npgsql" /> 
     <add name="Npgsql Data Provider" invariant="Npgsql" description=".Net Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" support="FF" /> 
    </DbProviderFactories> 
    </system.data> 

Это создает новая база данных SQL Server PostgreSQL в зависимости от того, как вызывается базовый класс DbContext.

+0

Это здорово, что вы спасли мой день. Я боролся с этим, и ваш код исправил проблему. спасибо за обмен, у меня также есть эта строка в моем web.config

+0

Рад, что это вам помогло – Niko

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