专栏首页GuZhenYin使用Entity Framework Core访问数据库(DB2篇)

使用Entity Framework Core访问数据库(DB2篇)

前言

上一篇讲了一些EF Core访问Oracle的坑。(感兴趣请移步:使用Entity Framework Core访问数据库(Oracle篇)

这篇主要讲一下关于EF Core访问DB2的一揽子~问题。

本篇采用DBFirst直接生成实体。

关于EF Core DB2 的官方文档:点这里(E文好的可以参考)

正文

1.生成上下文实体,并访问数据库

首先我们当然是生成上下文实体啦~

我们创建一个空的控制台程序如下:

然后Nuget添加引用:

Microsoft.EntityFrameworkCore.Tools(DBFirst的生成工具 必须的)

IBM.EntityFrameworkCore(DB2官方的库,这个库请注意,是Windows版本的,后面我们讲解各类版本的区别)

然后我们打开Nuget控制台

输入DBFirst的生成语句 生成上下文,语句如下:

Scaffold-DbContext "这里是你的连接字符串;" IBM.EntityFrameworkCore  

生成效果如下:

这样我们就生成了我们的上下文实体。

我们编写一个简单的查询语句,查询一下Price表的数据量:

 class Program
    {
        static void Main(string[] args)
        {
            using (MYTESTDBContext db = new MYTESTDBContext())
            {
               var date =  db.Price.Count();
                Console.WriteLine(date);
                Console.ReadLine();
            }
        }
    }

效果如下:

证明我们的上下文是没什么问题的,至此关于Windows系统的DB2访问。。就完美结束了。。

2.关于在其他系统使用DB2的小问题。

上面我们使用的开发机是windows系统,所以直接引用了

IBM.EntityFrameworkCore包。

但是我们在Nuget搜索关键字IBM.EntityFrameworkCore

你会发现它有三个包,如下:

So...一脸黑人懵比。。

其实在官方文档中已经解释过了。

Windows系统使用:IBM.EntityFrameworkCore

Linux系统使用:IBM.EntityFrameworkCore-Inx

MacOS系统使用:IBM.EntityFrameworkCore-osx

在生成上下文的时候,前面的步骤无需改动。最后生成的语句改成你对应的dll即可。

所以 有些在MacOS本上使用VS code的兄弟。。请引用osx的包哦。

3.关于在Docker中部署的问题。

我这个项目也是一个移植类的项目。既然要费心的移植,那目的当然是跑在linux系统上。。打包到docker 实现容器化部署

所以。。

但是我们的开发机又是windows系统。。

所以我们需要在引用一下IBM.EntityFrameworkCore-Inx(PS:同时引用2个包不会有冲突)

然后我们生成。。部署到docker。。

你会发现。。项目跑起来了。。但是查询数据库。。又挂掉了。。

错误信息如下:

Unhandled Exception: System.DllNotFoundException: Unable to load DLL 'libdb2.so': The specified module could not be found.

缺少依赖包,这个问题纠结了我一夜。。

后来查询各种资料(查到凌晨。。MMP)发现,官方有一篇博客对这个问题进行了说明。但是解决方案我觉得并不是很合适,文章地址:点这里

官方介绍是因为在docker环境中缺少了一个名为libxml2.so.2的依赖库

我们需要自己下载这个库。。(百度搜索 )

说一下为什么我觉得官方的解决方案不是很合适,以为他需要我们在main方法中加一段设置linux快捷访问的代码。

其实我们完全可以把这段操作放在我们的DockerFile中。

所以我们最终的DockerFile应该如下:

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
COPY . /app
EXPOSE 80
COPY . ./
COPY clidriver /app/clidriver
COPY libs/libxml2.so.2.9.1 /app/clidriver/lib/libxml2.so.2.9.1
RUN  ln /app/clidriver/lib/libxml2.so.2.9.1 /app/clidriver/lib/libxml2.so.2
ENV LD_LIBRARY_PATH="/app/clidriver/lib/"
ENV PATH=$PATH:"/app/clidriver/bin:/app/clidriver/lib"
ENTRYPOINT ["dotnet", "DockerTest.dll"]

然后查看我们的项目。。即可成功访问DB2数据库。~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一步步学习EF Core(3.EF Core2.0路线图)

    前言 这几天一直在研究EF Core的官方文档,暂时没有发现什么比较新的和EF6.x差距比较大的东西. 不过我倒是发现了EF Core的路线图更新了,下面我们就...

    GuZhenYin
  • 一步步学习EF Core(1.DBFirst)

    前言 很久没写博客了,因为真的很忙,终于空下来,打算学习一下EF Core顺便写个系列, 今天我们就来看看第一篇DBFirst.  本文环境:VS2017  W...

    GuZhenYin
  • Entity Framework Core 2.0 新特性

    前言 Entity Framework Core 2.0更新也已经有一段时间了,园子里也有不少的文章.. 看了下2.0的新特性基本算是完成了我之前发布的路线图的...

    GuZhenYin
  • 视频上云解决方案EasyCVR支持接入海康SDK吗?

    有不少项目团队在进行监控视频接入的时候,都是需要配置摄像头或者SDK等,我们之前介绍过视频上云网关EasyCVR是支持接入海康SDK的,那么在海康SDK配置完成...

    EasyNVR
  • 直连路由

    直接路由就是直接连接网段的路由,就是连接在各个路由器接口网段的路由,都是在路由器启动的时候可以直接得到的路由网段。

    随心助手
  • Guava Collect

    Guava是什么 进入新公司就会接触一些新的东东,Guava就是一个,Guava是Google的一个开源类库,丰富了JDK的API,而且使用起来很方便,本文介绍...

    高爽
  • 黄仁勋定律是新的摩尔定律!这就是黄教主收购Arm的原因

    华尔街日报报道称,摩尔定律正在放缓,但有一项新定律,可能对计算下半个世纪同样重要。

    新智元
  • 基于 HTML5 WebGL 的 3D “弹力”布局

    HT_hightopo
  • 第3章章节测试

    A EIGRP 内部路由   B ISIS  C OSPF    D  RIPv1   

    py3study
  • 基于 HTML5 WebGL 的 3D “弹力”布局

    分子力(molecular force),又称分子间作用力、范得瓦耳斯力,是指分子间的相互作用。当二分子相距较远时,主要表现为吸引力,这种力主要来源于一个分子被...

    HT for Web

扫码关注云+社区

领取腾讯云代金券