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

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

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

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

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

正文

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

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

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

640?wx_fmt=png

然后Nuget添加引用:

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

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

然后我们打开Nuget控制台

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

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

生成效果如下:

640?wx_fmt=png

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

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

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

效果如下:

640?wx_fmt=png

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

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

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

IBM.EntityFrameworkCore包。

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

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

640?wx_fmt=png

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快捷访问的代码。

640?wx_fmt=png

其实我们完全可以把这段操作放在我们的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:包括国外也不多。。)。。我都怀疑我是第一个吃螃蟹的人。。。

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

原文地址:https://www.cnblogs.com/GuZhenYin/p/10790956.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 
640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux中以单容器部署Nginx+ASP.NET Core

正如前文提到的,强烈推荐在生产环境中使用反向代理服务器转发请求到Kestrel Http服务器,本文将会实践将Nginx --->ASP.NET Core 部署架构容器化的过程。Nginx->ASP.NET Coe部署架构容器化在Docker中部署Nginx--->ASP.NETCore 有两种选择&#x…

领域驱动设计学习之路—DDD的原则与实践

本文是我学习Scott Millett & Nick Tune编著的《领域驱动设计模式、原理与实践》一书的学习笔记,一共会分为4个部分如下,此文为第1部分:领域驱动设计的原则与实践战略模式:在有界上下文之间通信战术模式:创建有效的…

.NET Core中使用Dapper操作Oracle存储过程最佳实践

为什么说是最佳实践呢?因为在实际开发中踩坑了,而且发现网上大多数文章给出的解决方法都不能很好地解决问题。尤其是在获取类型为OracleDbType.RefCursor,输出为:ParameterDirection.Output数据的时候。网上千篇一律的说写一个Ora…

CanalSharp.AspNetCore v0.0.4-支持输出到MongoDB

一、多样输出支持CanalSharp.AspNetCore是一个基于CanalSharp的适用于ASP.NET Core的一个后台任务组件,它可以随着ASP.NET Core实例的启动而启动,目前采用轮询的方式对Canal Server进行监听,获得MySql行更改(RowChange&#xff09…

CF1039C Network Safety

CF1039C Network Safety 题意: 题解: 如果我们同时选中a,b两个点,无论异或什么值,都不会影响图的安全性,因为图本来就是安全的 破坏图的安全性只有一种情况,那就是选了a,没选b&…

使用Jenkins来实现内部的持续集成流程(下)

目录配置项目构建添加任务添加源代码地址和登录凭据添加构建触发器 TFS添加WebHook 添加构建步骤后端UI API端 配置项目构建1添加任务2添加源代码地址和登录凭据添加源代码地址和登录凭证此图没有填写凭证时显示的错误点击Credential后面的添加 填写能访问源代码的用户名和密码…

.NET和Docker ,比翼双飞

DockerCon 2019本周将在旧金山举行 ,DockerCon 是从业者、贡献者、维护者、开发者和容器生态系统学习、网络和创新的一站式活动。 .NET 团队博客发布了《一起使用.NET和Docker - DockerCon 2019更新》:https://devblogs.microsoft.com/dotnet/using-net-…

Visible Lattice Points SPOJ - VLATTICE

Visible Lattice Points SPOJ - VLATTICE 题意&#xff1a; 有一个n∗n∗n的三维直角坐标空间&#xff0c;问从(0,0,0)看能看到几个点。 题解&#xff1a; 本题是二维的一个升级版&#xff0c;升级成三维 用莫比乌斯反演来做 代码&#xff1a; #include <bits/stdc.h…

使用ASP.NET Core开发GraphQL服务器 -- 极简预备知识(上)

为了介绍使用ASP.NET Core构建GraphQL服务器&#xff0c;本文需要介绍一下GraphQL&#xff0c;其实看官网的文档就行。什么是GraphQL&#xff1f;GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。 GraphQL 对你的 API 中的数据提供了一套易于理解的完整描…

使用 dotnet 命令行配合 vscode 完成一个完整 .NET 解决方案的编写和调试

如果你是开发个人项目&#xff0c;那就直接用 Visual Studio Community 版本吧&#xff0c;对个人免费&#xff0c;对小团体免费&#xff0c;不需要这么折腾。如果你是 Mac / Linux 用户&#xff0c;不想用 Visual Studio for Mac 版&#xff1b;或者不想用 Visual Studio for …

亲儿子 | Azure SignalR 服务现在支持 ASP.NET

点击上方蓝字关注“汪宇杰博客”文 / Zhidi译 / Edi Wang我们刚刚发布了支持ASP.NET的正式版 SignalR 服务 SDKMicrosoft.Azure.SignalR.AspNet v1.0.0Azure SignalR 服务是一种完全托管的用于实时消息传递的 Azure 服务。它是扩展 ASP.NET Core SignalR 应用程序的首选方法。但…

VS Code Remote 发布!开启远程开发新时代

今天&#xff08; 北京时间 2019 年 5 月 3 日 &#xff09;&#xff0c;在 PyCon 2019 大会上&#xff0c;微软发布了 VS Code Remote&#xff0c;开启了远程开发的新时代&#xff01;这次发布包含了三款核心的全新插件&#xff0c;它们可以帮助开发者在容器&#xff0c;物理或…

使用ASP.NET Core开发GraphQL服务器 -- 预备知识(下)

上一篇&#xff1a;使用ASP.NET Core开发GraphQL服务器 -- 极简预备知识(上)处理数据嵌套字段看例子&#xff1a;我想查看viewer下的repositories。注意里面的edges&#xff0c;一旦看到这个词&#xff0c;通常就表示有连接到某个数组的数据。在这里就是一个集合的repository。…

使用 Docker 在 Linux 上托管 ASP.NET Core 应用程序

说在前面在阅读本文之前&#xff0c;您必须对 Docker 的中涉及的基本概念以及常见命令有一定了解&#xff0c;本文侧重实战&#xff0c;不会对相关概念详述。同时请确保您本地开发机器已完成如下安装&#xff1a;Docker 18.06 或更高版本的 Docker 客户端.NET Core SDK 2.2 或更…

ICPC网络赛第二场G Limit

ICPC网络赛第二场G Limit 题意&#xff1a; 给你数组a和b&#xff0c;求解&#xff1a; 1≤n≤100000,−100≤ai,bi≤100,0≤t≤5.1≤n≤100000,−100≤a_{i},b_{i}≤100,0≤t≤5.1≤n≤100000,−100≤ai​,bi​≤100,0≤t≤5. 题解&#xff1a; 要用到洛必达来做&#xf…

[VSCode插件推荐] REST Client: 也许是比Postman更好的选择

在测试REST API的时候&#xff0c;想必大家都会有不同的工具选择。如果是基于CLI的话&#xff0c;大家应该会选择cURL。如果是GUI工具的话&#xff0c;相信很多人都会使用Postman。不过今天&#xff0c;笔者要推荐的是REST Client插件。也许&#xff0c;它是比Postman更好的选择…

.Net资讯 | 一大波开发者福利来了, 一份微软官方Github上发布的开源项目清单等你签收...

目录微软Github开源项目入口微软开源项目受欢迎程度排名Visual Studio CodeTypeScriptRxJS.NET Core 基础类库CNTKMicrosoft calculatorMonaco editorMS-DOSRedis windows版.NET Core CLR (公共语言运行时)ASP.NET CoreEntity Framework CorePowerShell如何在其中搜索自己需要的…

C#位运算实际作用之操作整型某一位

1.前言前几天写了两篇关于c#位运算的文章c#位运算基本概念与计算过程C#位运算实际运用在文中也提到了位运算的实际作用之一就是合并整型&#xff0c;当时引用了一个问题&#xff1a;C# 用两个short&#xff0c;一个int32拼成一个long型&#xff0c;高16位用short&#xff0c;中…

使用高性能Pipelines构建.NET通讯程序

.NET Standard支持一组新的API&#xff0c;System.Span, System.Memory&#xff0c;还有System.IO.Pipelines。这几个新的API极大了提升了.NET程序的效能&#xff0c;将来.NET很多基础API都会使用它们进行重写。Pipelines旨在解决.NET编写Socket通信程序时的很多困难&#xff0…

全球开发者的年度盛宴:微软全球开发者大会 Build 2019邀您一同加入

一年一度的微软全球开发者大会&#xff08;Build&#xff09;将于5月6日至8日在美国西雅图举办。本届大会将围绕全球当下的热门技术展开&#xff0c;包括人工智能、机器学习、容器、DevOps、物联网、混合现实以及Power Platforms等&#xff1b;微软热爱开发者、重视开发者&…