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

歡迎訪問 生活随笔!

生活随笔

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

数据库

用Way.EntityDB进行Entity Framework Core数据库建模

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

Way.EntityDB是一個基于EF Core的數據層框架,它取消了EF Core的Migration機制,因為Migration并不是通用的,比如說sql server生成的migration,如果換成sqlite,運行時會報錯的,也就是數據庫不能更換。

Way.EntityDB內置建模工具,通過圖形化建表,生成Model對象代碼,并且它會把表結構的修改過程,全部記錄下來,涵蓋在Model代碼里面,所以,在新的代碼運行時,數據庫也會自動更新到最新結構。

?舉個例子,當你把一個字段的名字從column1,更改為column2,EF Core生成的migration,就是把column1刪除,并添加一個column2,這樣,column1的現有數據就會丟失。而EntityDB則不一樣,它只會把column1改名為column2,

因為它記錄的是表結構修改的過程,而不是匹對Model類的前后變化。

?

Way.EntityDB源碼位置:

https://github.com/simpleway2016/EntityDB

啟動服務器端

Way.EntityDB是允許多人同時使用,所以,分為服務器和客戶端。

下載源碼,編譯后,在Debug/netcoreapp2.0文件夾里面,創建一個批處理文件run6062.bat,內容如下:

dotnet Way.EJServer.dll 6062

6062是本機任意一個沒有使用的端口號,表示以6062為端口,創建一個服務器工作空間

運行run6062.bat,啟動服務器端

?

運行客戶端

編譯并運行EJClient.exe

server url:https://localhost:6062

user name:sa

password:1

登錄進去,由于沒有工程項目,所以界面空白,點擊【project】菜單,創建一個項目

右鍵點擊【Database】,新建一個數據庫

再新建一個數據模塊UserInfo

雙擊UserInfo,在數據模塊里面,空白處點擊右鍵,新建數據表

?

?

?

這樣,一張數據表就創建完成

你必須掌握的Entity Framework 6.x與Core 2.0

作者:汪鵬

當當 廣告 購買


編程使用數據表

新建一個.net core 控制臺項目

給這個項目安裝nuget包:Way.EntityDB

然后,回到EJClient,在TestDB處點擊右鍵,點擊【生成數據庫模型代碼】

保存到剛才創建的項目里面

?

?這樣,Model類就準備好了,開始寫代碼

從代碼可以看到,雖然也是EF Core,但由于禁用了ef的數據緩存機制,所以不能使用SaveChanges去同步數據庫,可以使用Insert Update Delete等方法同步數據庫

禁用緩存機制,可以避免程序員在編程的時候混亂(有時候想把數據取出來,看看現在的數據狀態,但誰知道取的是緩存里面的對象)

禁用緩存機制,對于大數據量的查詢,也可以節約內存,提供效率,因為不再使用的對象,不會保存在內存里面

所以整體性能,應該和使用ADO.Net差不多

編寫觸發器?

?Way.EntityDB支持類似觸發器的功能。添加一個ActionCapture類

class UserInfoTrigger : Way.EntityDB.ActionCapture<MyDB.UserInfo> ?表示這個類捕獲的是UserInfo表的事件
這時候,這個類還不能起作用,必須在程序啟動時,把它實例化,注冊到DBContext里面 static Program(){Way.EntityDB.DBContext.RegisterActionCapture(new UserInfoTrigger());}

在ActionCapture類里面,只要override各個方法,就可以實現各種事件的捕獲。

級聯刪除

?EJClient可以設置表之間的級聯刪除關系,并且,被級聯刪除的數據,同樣可以被你編寫的觸發器捕捉到。

現在,我們新建一張數據表FamilyInfo

雙擊UserInfo,打開屬性框,切換到【級聯刪除】項,添加一個級聯刪除關系

導航屬性(一對一)

雖然UserInfo和FamilyInfo,在數據庫中并沒有建立關系,但是,從系統設計上來說,他們是有關系的,所以,在UserInfo里面,如果可以直接訪問FamilyInfo,會比較方便,所以,

可以給他們添加導航屬性,首先,我們假設他們是一對一的關系。

打開UserInfo屬性窗口,切換到【導航屬性】,并添加一個名稱為Family的屬性

然后,打開FamilyInfo屬性窗口,添加一個User屬性

這里要注意,UserInfo里面的Family屬性,不需要選擇ForeignKey,而FamilyInfo的User屬性,必須選擇ForeignKey

接著用EJClient生成Model代碼

然后,代碼,我們可以這樣寫了

var montherName = jack.Family.MotherName;直接可以取到母親姓名,不需要到數據庫再取一遍

?導航屬性(一對多)

?如果UserInfo和FamilyInfo是一對多的關系,那么,打開userinfo對話框,把導航屬性改為這樣:

這時候,就必須選擇ForeignKey了

用工具再次生成Model代碼

這次的代碼,就是這樣寫了:

變更數據庫類型

如果在開發過程中,你要變更數據庫類型,只需要更改連接字符串和類型即可

var db = new MyDB.DB.TestDB("server=192.168.136.137;uid=sa;pwd=Sql12345678;Database=TestDB", Way.EntityDB.DatabaseType.SqlServer);

這樣,就轉而使用SqlServer數據庫

原文地址:https://www.cnblogs.com/IWings/p/9304874.html

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

總結

以上是生活随笔為你收集整理的用Way.EntityDB进行Entity Framework Core数据库建模的全部內容,希望文章能夠幫你解決所遇到的問題。

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