当前位置: 首页 > news >正文

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开发团队!

回到目录

转载于:https://www.cnblogs.com/lori/archive/2013/04/02/2995039.html

相关文章:

  • 大数据第5天作业
  • oracle中if/else功能的实现的3种写法
  • CSS控制文字的自动截断
  • 缓存穿透与雪崩
  • 全虚拟化和半虚拟化的区别 cpu的ring0 ring1又是什么概念?
  • java selenium 题目二 如何处理Table
  • Apache mod_expires与Cache-Contro让数据在客户端缓存
  • c# 序列化和反序列化
  • C#基本语法学习(一)
  • 二叉树的先序遍历
  • 递归
  • python logging 快速上手
  • struts2实现ajax校验的2种方法
  • Struts2下应用KindEditor
  • JSP自定义标签开发入门
  • $translatePartialLoader加载失败及解决方式
  • es6要点
  • Git同步原始仓库到Fork仓库中
  • httpie使用详解
  • Java 多线程编程之:notify 和 wait 用法
  • js作用域和this的理解
  • React-生命周期杂记
  • ubuntu 下nginx安装 并支持https协议
  • 将回调地狱按在地上摩擦的Promise
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 原生 js 实现移动端 Touch 滑动反弹
  • 在Docker Swarm上部署Apache Storm:第1部分
  • #AngularJS#$sce.trustAsResourceUrl
  • #前后端分离# 头条发布系统
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (六)c52学习之旅-独立按键
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (新)网络工程师考点串讲与真题详解
  • (转)Linq学习笔记
  • (转)编辑寄语:因为爱心,所以美丽
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET Core中的去虚
  • .Net MVC + EF搭建学生管理系统
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .NET值类型变量“活”在哪?
  • .stream().map与.stream().flatMap的使用
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • @staticmethod和@classmethod的作用与区别
  • [ MSF使用实例 ] 利用永恒之蓝(MS17-010)漏洞导致windows靶机蓝屏并获取靶机权限
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • [ 数据结构 - C++] AVL树原理及实现
  • [2018-01-08] Python强化周的第一天
  • [BZOJ3223]文艺平衡树
  • [C#基础知识系列]专题十七:深入理解动态类型