前言

上一篇讲了一些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. springMVC 中的restful 架构风格

    RESTful架构 : 是一种设计的风格,并不是标准,只是提供了一组设计原则和约束条件,也是目前比较流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越多网站的采用. ...

  2. nginx配置 location及rewrite规则详解

    1. location正则写法 语法规则: location [=|~|~*|^~] /uri/ { … } =    开头表示精确匹配 ^~  开头表示uri以某个常规字符串开头,理解为匹配 url ...

  3. java基础语法3

    逻辑运算符 &:与,和有共同的,必须条件都满足才是true 有false就返回false,必须都是true才返回true |:或者,其中有一个满足条件就返回true ^亦或,相同是false, ...

  4. 源码安装xadmin及使用

    xadmin是django的第三方后台 我们也可以使用pip来安装,但是推荐使用源码安装. 因为有些新功能以及发布在GitHub上,但是还未发布到pypi上,我们就可以提取使用这些功能. 一.安装 1 ...

  5. Python Cook函数笔记 【第一章】

    2017年4月28日 19:29:52 解压赋值给多个变量 可迭代的对象(list,tuple,string,文件对象,迭代器,生成器等),都可以进行解压赋值给多个对象. #!/usr/bin/env ...

  6. java(二、基础语法和基本数据类型)

    Java 基础语法 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如,一 ...

  7. Spring Boot 快速入门笔记

    Spirng boot笔记 简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发 ...

  8. Spring Boot实战笔记(九)-- Spring高级话题(组合注解与元注解)

    一.组合注解与元注解 从Spring 2开始,为了响应JDK 1.5推出的注解功能,Spring开始大量加入注解来替代xml配置.Spring的注解主要用来配置注入Bean,切面相关配置(@Trans ...

  9. Maven学习(七)-- 使用Maven构建多模块项目

    摘自:http://www.cnblogs.com/xdp-gacl/p/4242221.html 在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分层开发,最常见的就是分为doma ...

  10. Shell脚本中获取select值

    最近做一个数据清理,根据行号清理,所以需要查出这个行的最大最小值出来进行删除,如果靠手动每次去查,太麻烦所以就用在sh脚本当中执行SELECT语句,并将结果赋值给一个变量. sh脚本如下 #! /bi ...