EF架构~单表一对多集合的插入(树型结构)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                EF架构~单表一对多集合的插入(树型结构)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                單表一對多關系很常見,它是一種樹形結構,如系統菜單表,部門表,分類表,這些都可以做成單表一對多關系,而這些表做成一對多關系后,如果通過EntityFramework進行插入操作時,會很方便,EF會自動為我們確實上級ID,對于操作的性能也是可以接受的,與數據庫建立一次鏈接,發一批指定,這是我們可以接受的,雖然在性能上不是最佳的,但綜合對比來看,它即是最佳的。(結合對比=程序性能+開發人員工時+程序擴展性+程序可讀性)
OK,我們以菜單表為例,說一下這個菜單表初始化的過程
對于菜單實體的賦值,看一下代碼:
var menu = new WebManageMenus{About = string.Empty,LinkUrl = string.Empty,MenuLevel = 0,MenuName = form["MenuName"] ?? "根",Operator = string.Empty,ParentID = null,SortNumber = 1,Status = Status.Normal.GetHashCode(),UpdateDate = DateTime.Now,WebManageMenus1 = new List<WebManageMenus>{new WebManageMenus{About = string.Empty,LinkUrl = string.Empty,MenuLevel = 1,MenuName ="系統管理",Operator = string.Empty,SortNumber = 1,Status = Status.Normal.GetHashCode(),UpdateDate = DateTime.Now,WebManageMenus1 = new List<WebManageMenus>{#region 二級菜單new WebManageMenus{About = string.Empty,LinkUrl = string.Empty,MenuLevel = 2,MenuName ="角色管理",Operator = string.Empty,SortNumber = 1,Status = Status.Normal.GetHashCode(),UpdateDate = DateTime.Now,WebManageMenus1 = new List<WebManageMenus>{new WebManageMenus{About = string.Empty,LinkUrl = "/Role/Create",MenuLevel = 3,MenuName ="新建角色",Operator = string.Empty,SortNumber = 1,Status = Status.Normal.GetHashCode(),UpdateDate = DateTime.Now},new WebManageMenus{About = string.Empty,LinkUrl = "/Role/Index",MenuLevel = 3,MenuName ="管理角色",Operator = string.Empty,SortNumber = 1,Status = Status.Normal.GetHashCode(),UpdateDate = DateTime.Now} }}, #endregion#region 二級菜單new WebManageMenus{About = string.Empty,LinkUrl = string.Empty,MenuLevel = 2,MenuName ="部門管理",Operator = string.Empty,SortNumber = 1,Status = Status.Normal.GetHashCode(),UpdateDate = DateTime.Now,WebManageMenus1 = new List<WebManageMenus>{new WebManageMenus{About = string.Empty,LinkUrl = "/Department/Index",MenuLevel = 3,MenuName ="管理部門",Operator = string.Empty,SortNumber = 1,Status = Status.Normal.GetHashCode(),UpdateDate = DateTime.Now} }}, #endregion#region 二級菜單new WebManageMenus{About = string.Empty,LinkUrl = string.Empty,MenuLevel = 2,MenuName ="菜單管理",Operator = string.Empty,SortNumber = 1,Status = Status.Normal.GetHashCode(),UpdateDate = DateTime.Now,WebManageMenus1 = new List<WebManageMenus>{new WebManageMenus{About = string.Empty,LinkUrl = "/Menu/Index",MenuLevel = 3,MenuName ="管理菜單管理",Operator = string.Empty,SortNumber = 1,Status = Status.Normal.GetHashCode(),UpdateDate = DateTime.Now} }}, #endregion#region 二級菜單new WebManageMenus{About = string.Empty,LinkUrl = string.Empty,MenuLevel = 2,MenuName ="員工管理",Operator = string.Empty,SortNumber = 1,Status = Status.Normal.GetHashCode(),UpdateDate = DateTime.Now,WebManageMenus1 = new List<WebManageMenus>{new WebManageMenus{About = string.Empty,LinkUrl = "/User/Create",MenuLevel = 3,MenuName ="新建員工",Operator = string.Empty,SortNumber = 1,Status = Status.Normal.GetHashCode(),UpdateDate = DateTime.Now},new WebManageMenus{About = string.Empty,LinkUrl = "/User/Index",MenuLevel = 3,MenuName ="管理員工",Operator = string.Empty,SortNumber = 1,Status = Status.Normal.GetHashCode(),UpdateDate = DateTime.Now} }}, #endregion}}}};MenuRepository.Insert(menu);我們可以看到,賦值的過程,我采用的EF生成的實體標準,對于子對象的賦值,我們可以看到,parentID并沒有賦值,因為這時它還沒不存在,這個parentID為上級
菜單的主鍵ID,所以EF在插入完父菜單后,會自動將ID賦值子對象的ParentID,這個過程是系統幫我們完成的。
對于上面的過程,所生成的SQL語句也是我們可以接受的
感謝您的閱讀,感謝Entity Framework開發團隊!
本文轉自博客園張占嶺(倉儲大叔)的博客,原文鏈接:EF架構~單表一對多集合的插入(樹型結構),如需轉載請自行聯系原博主。
總結
以上是生活随笔為你收集整理的EF架构~单表一对多集合的插入(树型结构)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: CrazyWing:Python自动化运
- 下一篇: Android 中文 API (19)
