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

前言

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

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

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

 关于EF Core DB2 的官方文档:点这里(E文好的能够参考)数据库

正文

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

   首先咱们固然是生成上下文实体啦~windows

    咱们建立一个空的控制台程序以下:app

而后Nuget添加引用:ide

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

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

而后咱们打开Nuget控制台spa

输入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数据库。~

 

结束语

提及来都是泪,国内关于EF Core访问 DB2的资料实在是太少太少了(ps:包括国外也很少。。)。。我都怀疑我是第一个吃螃蟹的人。。。

写这篇博客 也是但愿记录一下,下次能够在回来查看。备忘。。哈哈。。

相关文章
相关标签/搜索