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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

EFCore Lazy Loading + Inheritance = 干净的数据表 (二)

發(fā)布時間:2023/12/4 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EFCore Lazy Loading + Inheritance = 干净的数据表 (二) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

本篇是上一篇EFCore Lazy Loading + Inheritance = 干凈的數(shù)據(jù)表 (一) 【獻(xiàn)給處女座的DB First程序猿】?前菜?的續(xù)篇。這一篇才是真的為處女座的DB First程序猿準(zhǔn)備的正餐。
繼續(xù)上一篇的話題,我們希望用EFCore,且繼續(xù)使用與邏輯設(shè)計(jì)的β角偏差很少的數(shù)據(jù)表結(jié)構(gòu),徹底不想看到那種“裝飾墻”的效果。
提醒一下,這一部分,屬于有點(diǎn)”走火入魔“的性質(zhì)。因?yàn)槭且剡^頭來改動類的代碼(稍微改動邏輯設(shè)計(jì))來遷就數(shù)據(jù)表(物理設(shè)計(jì)),通過達(dá)到平衡點(diǎn),來實(shí)現(xiàn)處女座們希望看到的“完美“結(jié)果。

本篇的程序,可以在?

https://github.com/kentliu2007/EFCoreDemo/tree/master/InheritanceWithEntitySplit?下載。建議大家可以下載之后對照著程序來閱讀本篇(我用的是VS2017)。

直接配置EFCore的DBContext可行否?

我們能否通過在DBContext里面配置好Entity和數(shù)據(jù)表的關(guān)系,是否就可以?
看下面的程序:

  • DBContext:

  • Unit Test:

    實(shí)際上,出錯的話,Unit Test才可以通過。所以基于這樣的結(jié)果,我們知道,沒戲。
    拉倒吧。哪怕我們已經(jīng)很認(rèn)真地配置好了Entity和數(shù)據(jù)表的關(guān)系。已經(jīng)精確到每個字段級別都沒有漏了。
    結(jié)果其實(shí)程序會報(bào)錯的。不信?跑跑Unit Test就知道了。

用EFCore Lazy Loading來實(shí)現(xiàn)吧

有什么辦法來實(shí)現(xiàn)?
還記不記得我的博客里面有一篇如何用EFCore Lazy Loading實(shí)現(xiàn)Entity Split?在這一篇里面,我們用了 Lazy Loading的功能,用walk around的方式實(shí)現(xiàn)了 entity split。
這個walk around的思路,我們可以借鑒用起來:

  • 對Students和Teachers數(shù)據(jù)表,我們可以建立兩個對應(yīng)的類,分別弄個InternalStudent和InternalTeacher的類。

  • DBContext里面,設(shè)置好InternalStudent以及InternalTeacher的映射關(guān)系

  • Student / Teacher 類特有的屬性,我們用Lazy Loading的方式,在getter/setter里面,改為訪問上述InternalStudent / InternalTeacher實(shí)例所對應(yīng)的屬性。

數(shù)據(jù)表和程序

  • 數(shù)據(jù)表

    表的索引和倆外鍵,和上一篇差不多,就不騙篇幅了。
    (?如果拿著這個數(shù)據(jù)表和一開始的邏輯設(shè)計(jì)比較,我們又會發(fā)現(xiàn)出現(xiàn)了偏差很小的β角彩蛋?)

  • Solution

  • 程序

    • User

    • InternalStudent

    • Student

    • InternalTeacher和Teacher的程序和InternalStudent以及Student差不多思路,就不騙篇幅了。

    • DBContext

    • Unit Test

    • Demo數(shù)據(jù)


搞定了。
就這樣,用walk around的做法,實(shí)現(xiàn)了“完美”的平衡點(diǎn),讓處女座的DB First er程序猿不再糾結(jié)。還可以吧? :-P

結(jié)語

這種walk around的做法,雖然有點(diǎn)走火入魔,但是在 EFCore更好地支持類繼承,或者Entity Split之前,咱們先湊合著用起來吧。
相信隨著EFCore版本的不斷更新,"面包會有的,牛奶會有的,一切都會有的。"。

相關(guān)文章:

  • Shadow Properties之美(一)【Microsoft Entity Framework Core隨筆】

  • Shadow Properties之美(二)【Microsoft Entity Framework Core隨筆】

  • “幕后英雄”之Backing Fields【Microsoft Entity Framework Core隨筆】

  • 如何用EFCore Lazy Loading實(shí)現(xiàn)Entity Split


原文地址:https://www.cnblogs.com/fatkent/p/10396596.html

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


總結(jié)

以上是生活随笔為你收集整理的EFCore Lazy Loading + Inheritance = 干净的数据表 (二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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