用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数据库建模的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 给正在努力的您几条建议(附开源代码)
- 下一篇: .NET Core开发日志——Runti