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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

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

上一篇講了一些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
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?

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。