1. 程式人生 > >使用EF連接Postgresql

使用EF連接Postgresql

oop 循環 ros style sta .com 接下來 entity sin

環境:

VS2017 Community

Windows 10

Postgresql 9.6

安裝Postgresql:

https://www.postgresql.org/download/

1.安裝我們需要的Nuget Packages:

install-package npgsql -version 3.1.1
Install-Package EntityFramework6.Npgsql -Version 3.1.1

2.首先得安裝一個vs的擴展工具,這樣我們才能在server explorer中像連sql中一樣連接到postgresql數據庫。

技術分享

3. 安裝好上面的擴展後,我們就在se中建立好我們的連接。

技術分享

4.我們選擇的是Database First的方式,所以之後我們是從DB裏面來創建我們的DataModel。

技術分享

5.建立好Model後,我們試著來創建一個EF的Control.

技術分享

6.看到以下這個錯誤。

技術分享

7.Build一下我們的project之後,接著看到這個錯誤。

技術分享

8.在Web config 裏加入如下的配置。

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

9.應該能看到conttroller創建成功了。

技術分享

10.但是訪問的時候,可能由於我們的表裏索引和外鍵的關系形成死循環,我們需要在Global.asax中加入如下的配置。

HttpConfiguration config = GlobalConfiguration.Configuration;

config.Formatters.JsonFormatter
            .SerializerSettings
            .ReferenceLoopHandling 
= Newtonsoft.Json.ReferenceLoopHandling.Ignore;

接下來可以使用postman來測試自己的API是不是自己想要返回的東西了。

References:

http://www.npgsql.org/doc/index.html

https://www.nuget.org/packages/EntityFramework6.Npgsql/

https://www.nuget.org/packages/Npgsql/

https://github.com/npgsql/npgsql/issues/1439

https://wiki.postgresql.org/wiki/Using_Microsoft_.NET_with_the_PostgreSQL_Database_Server_via_ODBC

https://stackoverflow.com/questions/19467673/entity-framework-self-referencing-loop-detected

使用EF連接Postgresql