前言

上一篇讲了一些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
COPY . ./
COPY clidriver /app/clidriver
COPY libs/libxml2.so.2.9. /app/clidriver/lib/libxml2.so.2.9.
RUN ln /app/clidriver/lib/libxml2.so.2.9. /app/clidriver/lib/libxml2.so.
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:包括国外也不多。。)。。我都怀疑我是第一个吃螃蟹的人。。。

写这篇博客 也是希望记录一下,下次可以在回来查看。备忘。。哈哈。。

使用Entity Framework Core访问数据库(DB2篇)的更多相关文章

  1. 使用Entity Framework Core访问数据库(Oracle篇)

    前言 哇..看看时间 真的很久很久没写博客了 将近一年了. 最近一直在忙各种家中事务和公司的新框架  终于抽出时间来更新一波了. 本篇主要讲一下关于Entity Framework Core访问ora ...

  2. Entity Framework Core 之数据库迁移

    前言 最近打算用.NET Core写一份开源的简易CMS系统,来练练手 所以又去深入研究了一下Entity Framework Core 发现其实有些细节园子里还是很少讲到. 特意整理了几个细节. 正 ...

  3. ASP.NET CORE系列【六】Entity Framework Core 之数据库迁移

    前言 最近打算用.NET Core写一份简单的后台系统,来练练手 然后又用到了Entity Framework Core 发现园子里有些文章讲得不是那么细节,对于新手小白来说,可能会有点懵. 特意整理 ...

  4. .NET Core Entity使用Entity Framework Core链接数据库

    首先安装Nuget包 Install-package Microsoft.EntityFrameworkCore Install-package Microsoft.EntityFrameworkCo ...

  5. 添加Entity Framework Core,数据库迁移

    1.建立Entity 建立IEntity的接口 建立实现IEntity接口的抽象类Entity 建立类继承抽象类Entity 2. 数据库放到infrastructure的项目中 3.注册和配置这个d ...

  6. asp.net core + entity framework core 多数据库类型支持实战

    根据微软官方文档的说法,有两种方法可以实现在一个app中同时适应多种不同类型的数据库,并且全部支持migrations操作.其一,使用两个dbcontext:其二,修改migration文件,添加特定 ...

  7. [UWP小白日记-11]在UWP中使用Entity Framework Core(Entity Framework 7)操作SQLite数据库(一)

    前言 本文中,您将创建一个通用应用程序(UWP),使用Entity Framework Core(Entity Framework 7)框架在SQLite数据库上执行基本的数据访问. 准备: Enti ...

  8. ASP.NET Core 入门教程 8、ASP.NET Core + Entity Framework Core 数据访问入门

    一.前言 1.本教程主要内容 ASP.NET Core MVC 集成 EF Core 介绍&操作步骤 ASP.NET Core MVC 使用 EF Core + Linq to Entity ...

  9. ASP.NET Core 入门笔记9,ASP.NET Core + Entity Framework Core 数据访问入门

    一.前言 1.本教程主要内容 ASP.NET Core MVC 集成 EF Core 介绍&操作步骤 ASP.NET Core MVC 使用 EF Core + Linq to Entity ...

随机推荐

  1. 关于windows修改远程登录端口的问题

    windows远程桌面默认使用的是3389,为了避免被别用用心的扫描从而暴力破解远程服务器或者vps的账户信息.可以修改默认端口3389到其它端口,如8000,10000等.最好修改为10000以后的 ...

  2. C 四则运算表达式解析器

    下载实例:http://www.wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=1074 程序主要包括:基础结构定义.词法分析.语法分 ...

  3. mysql高级之编程优化

    ★编程优化一.字符编码(mysql控制台乱码输出解决:character_set_results='gbk')表/列编码设置  列:alter table 表名 change 列名 列名 数据类型 c ...

  4. Elasticsearch 编程API入门系列---说在前面的话

    前提,是 Eclipse下Maven新建项目.自动打依赖jar包(包含普通项目和Web项目) setting.xml配置文件 如何在Maven官网下载历史版本 HBase 开发环境搭建(Eclipse ...

  5. htmlparser 学习

    htmlparser 学习系列 htmlparser 使用法使用与详解

  6. .NET开发微信小程序-接收微信支付回调数据

    获取微信支付传回来的数据 1.MVC控制器 /// <summary> /// 付款返回的数据 /// </summary> /// <returns></r ...

  7. linux基础命令用法

    目录管理 ls.cd.pwd.mkdir.rmdir.tree ls(list) 列出,列表 用法: ls -l:长格式 文件类型: -:普通文件 (f) d: 目录文件 b: 块设备文件 (bloc ...

  8. File文件操作学习总结

    1.java.io.file用于表示文件(目录),也就是说程序员可以通过File类在程序中操作硬盘上的文件和目录, 2.File类只能用于表示文件(目录)的信息(名称和大小),不能对文件内容进行访问. ...

  9. PAT1065: A+B and C (64bit)

    1065. A+B and C (64bit) (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 HOU, Qiming G ...

  10. no system images installed for this target这个问题如何解决?

    今天想查看个项目的布局,结果发现这个Hierarchy这个工具没有提供对实体机的支持,所以就想加一个模拟机,结果还曝出了这么么一个错误,导致不能设置模拟机: 在网上的查找下,发现原来是缺失了 圈中的是 ...