使用EF连接Postgresql

Posted HenRy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用EF连接Postgresql相关的知识,希望对你有一定的参考价值。

环境:

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的主要内容,如果未能解决你的问题,请参考以下文章

为 ASP.NET Core 5.0 - EF Core 5.0 Web App 配置 PostgreSQL 连接字符串以在 MS 或 Linux 云上运行?

PostgreSQL 上的 EF Core 批量删除

在 EF6 中使用时态表 - PostgreSQL

EF添加关联的提示问题:映射从第 260 行开始的片段时有问题:

如何在 .net 核心上使用 ef 核心在 postgresql(db first)中映射枚举

EF+postgresql中的一些问题