此处详细记录了现实项目中自连接的列表页面和增删改查页面。
狼奔代码生成器可以自动生成ASP.NET页面及后台代码。
生成的项目用到的技术有:Jquery+MVC+Entity Framework。
实践开发过程中,我们使用PowerDesigner设计数据库模型。狼奔代码生成器就是读取PowerDesigner设计的数据库模型,分析其中的表与表之间的关系模型,分析其中的表和字段的说明信息中的关键字,自动生成不同的页面。
表与表之间的关系模型包括
-
单表数据模型
-
自连接数据模型
-
一对一数据模型
-
一对多数据模型
-
一对多数据模型中的一张表是自连接
-
多对多数据模型
-
多对多数据模型中的一张表是自连接
架构图
部门的作用
部门是一个典型的自连接表
下面我们以部门为例子分析自连接数据模型,代码已在生成的文件中,并且注释详备,此文不再赘述
自连接数据模型
就是自己连接自己,一个自己的主键连接了一个自己的外键
列表
页面展示层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;命名空间。
服务层
(后期扩展)
删除
先选中一条,然后点击删除,请先删除子部门,再删除父部门
创建
修改
查看详细信息