自连接数据模型

此处详细记录了现实项目中自连接的列表页面和增删改查页面。
狼奔代码生成器可以自动生成ASP.NET页面及后台代码。
生成的项目用到的技术有:Jquery+MVC+Entity Framework。

实践开发过程中,我们使用PowerDesigner设计数据库模型。狼奔代码生成器就是读取PowerDesigner设计的数据库模型,分析其中的表与表之间的关系模型,分析其中的表和字段的说明信息中的关键字,自动生成不同的页面。

表与表之间的关系模型包括

  1. 单表数据模型
  2. 自连接数据模型
  3. 一对一数据模型
  4. 一对多数据模型
  5. 一对多数据模型中的一张表是自连接
  6. 多对多数据模型
  7. 多对多数据模型中的一张表是自连接

架构图

部门的作用

部门是一个典型的自连接表

下面我们以部门为例子分析自连接数据模型,代码已在生成的文件中,并且注释详备,此文不再赘述

自连接数据模型

就是自己连接自己,一个自己的主键连接了一个自己的外键

列表

页面展示层App

Mvc中的View的代码

此列表页面是参照\jquery-easyui-1.2.3\demo\treegrid3.html页面开发的,页面请求的数据格式如下:

{"total":117,"rows":[

    {"id":1,"code":"code1","name":"name1","addr":"address1"},

    {"id":11,"code":"code11","name":"name11","addr":"address11","_parentId":1},

    {"id":12,"code":"code12","name":"name12","addr":"address12","_parentId":1},

    {"id":2,"code":"code2","name":"name2","addr":"address2","state":"closed"}

]}

注意"_parentId"字段,当你按照这格式将全部数据都传到客户端,客户端脚本会根据"_parentId"字段自动的找出父子节点关系,所以我们按照这个格式定义了一个类SysDepartmentSef

备注:Entity Framework定义的实体字段不能以下划线开头,如果以下划线开头会添加一个前缀,所以需要我们自己设计一个SysDepartmentSef类,该类包含"_parentId"字段

 

Mvc中的Controller的代码

 

Mvc中的Model的代码

此文件中的类 SysDepartmentSef

业务接口层IBLL

此层作为业务逻辑层方法的接口,也是WCF对外暴露的契约

业务逻辑层BLL

数据字典类的业务逻辑写在BLL类库中,事务使用TransactionScope对象,SysDepartmentBLL.cs类文件里面封装了业务逻辑的操作方法,并且继承了BaseBLL基类

整个项目应该遵循的原则是:胖BLL,瘦mvc

这是获取自连接列表数据的方法很简单,就是将数据库中的部门实体(SysDepartment)集合转换成自定义的SysDepartmentSef实体集合

public List<SysDepartmentSef> GetAllMetadata()

{

SysEntities db = new SysEntities();

return repository.GetAll(db).Select(s =>

new SysDepartmentSef

{

Id = s.Id

                    ,Name = s.Name

                    ,_parentId = s.ParentId

                    ,Sort = s.Sort

                    ,PhoneNumber = s.PhoneNumber

                    ,FaxPhoneNumber = s.FaxPhoneNumber

                    ,Address = s.Address

                      

}).OrderBy(o => o.Sort).ToList();

}

 

数据访问层DAL

其中SysDepartment.cs文件放置的是数据字典表的实体和实体元数据的验证,而SysDepartmentRepository.cs文件放置的是对数据字典访问数据库的方法

业务实体在SysDepartment.cs文件中的SysDepartment类,它是一个分部 partial 类,内部可以自定义属性,MetadataType属性中指定了该实体属性的校验类SysDepartmentMetadata,并且它继承了IBaseEntity接口(此接口暂时没有任何成员);

SysDepartment.cs文件中还有一个SysDepartmentMetadata类用于校验SysDepartment类中的成员。注意校验类需要引用using System.ComponentModel.DataAnnotations;命名空间。

服务层

(后期扩展)

删除

先选中一条,然后点击删除,请先删除子部门,再删除父部门

创建

修改

查看详细信息

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值