日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發(fā)布時間:2023/12/4 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Entity Framework Core访问数据库(DB2篇) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

上一篇講了一些EF Core訪問Oracle的坑。(感興趣請移步:使用Entity Framework Core訪問數(shù)據(jù)庫(Oracle篇))

這篇主要講一下關(guān)于EF Core訪問DB2的一攬子~問題。

本篇采用DBFirst直接生成實(shí)體。

?關(guān)于EF Core DB2 的官方文檔:點(diǎn)這里(E文好的可以參考)

正文

1.生成上下文實(shí)體,并訪問數(shù)據(jù)庫

? ?首先我們當(dāng)然是生成上下文實(shí)體啦~

? ? 我們創(chuàng)建一個空的控制臺程序如下:

然后Nuget添加引用:

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

IBM.EntityFrameworkCore(DB2官方的庫,這個庫請注意,是Windows版本的,后面我們講解各類版本的區(qū)別)

然后我們打開Nuget控制臺

輸入DBFirst的生成語句 生成上下文,語句如下:

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

生成效果如下:

這樣我們就生成了我們的上下文實(shí)體。

我們編寫一個簡單的查詢語句,查詢一下Price表的數(shù)據(jù)量:

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

效果如下:

證明我們的上下文是沒什么問題的,至此關(guān)于Windows系統(tǒng)的DB2訪問。。就完美結(jié)束了。。

2.關(guān)于在其他系統(tǒng)使用DB2的小問題。

上面我們使用的開發(fā)機(jī)是windows系統(tǒng),所以直接引用了

IBM.EntityFrameworkCore包。

但是我們在Nuget搜索關(guān)鍵字IBM.EntityFrameworkCore

你會發(fā)現(xiàn)它有三個包,如下:

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

其實(shí)在官方文檔中已經(jīng)解釋過了。

Windows系統(tǒng)使用:IBM.EntityFrameworkCore

Linux系統(tǒng)使用:IBM.EntityFrameworkCore-Inx

MacOS系統(tǒng)使用:IBM.EntityFrameworkCore-osx

在生成上下文的時候,前面的步驟無需改動。最后生成的語句改成你對應(yīng)的dll即可。

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

?

3.關(guān)于在Docker中部署的問題。

我這個項(xiàng)目也是一個移植類的項(xiàng)目。既然要費(fèi)心的移植,那目的當(dāng)然是跑在linux系統(tǒng)上。。打包到docker 實(shí)現(xiàn)容器化部署

所以。。

但是我們的開發(fā)機(jī)又是windows系統(tǒng)。。

所以我們需要在引用一下IBM.EntityFrameworkCore-Inx(PS:同時引用2個包不會有沖突)

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

你會發(fā)現(xiàn)。。項(xiàng)目跑起來了。。但是查詢數(shù)據(jù)庫。。又掛掉了。。

錯誤信息如下:

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

缺少依賴包,這個問題糾結(jié)了我一夜。。

后來查詢各種資料(查到凌晨。。MMP)發(fā)現(xiàn),官方有一篇博客對這個問題進(jìn)行了說明。但是解決方案我覺得并不是很合適,文章地址:點(diǎn)這里

官方介紹是因?yàn)樵赿ocker環(huán)境中缺少了一個名為libxml2.so.2的依賴庫

我們需要自己下載這個庫。。(百度搜索 )

說一下為什么我覺得官方的解決方案不是很合適,以為他需要我們在main方法中加一段設(shè)置linux快捷訪問的代碼。

其實(shí)我們完全可以把這段操作放在我們的DockerFile中。

所以我們最終的DockerFile應(yīng)該如下:

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"]

然后查看我們的項(xiàng)目。。即可成功訪問DB2數(shù)據(jù)庫。~

結(jié)束語

說起來都是淚,國內(nèi)關(guān)于EF Core訪問 DB2的資料實(shí)在是太少太少了(ps:包括國外也不多。。)。。我都懷疑我是第一個吃螃蟹的人。。。

寫這篇博客 也是希望記錄一下,下次可以在回來查看。備忘。。哈哈。

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

.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的使用Entity Framework Core访问数据库(DB2篇)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。