MVC5+EF6 简易版CMS(非接口) 第四章:使用业务层方法,以及关联表解决方案
2015-05-06 12:57
351 查看
目录
简易版CMS后台管理系统开发流程
MVC5+EF6 简易版CMS(非接口) 第一章:新建项目
MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型
MVC5+EF6 简易版CMS(非接口) 第三章:数据存储和业务处理
MVC5+EF6 简易版CMS(非接口) 第四章:使用业务层方法,以及关联表解决方案
上一章介绍了,如何建数据层和业务,以及各层之间的引用过关系
这章主要讲解怎么使用业务层的方法。
以及普遍遇到的EF关联查询的问题解决方案
1、在FytMsys.Web文件夹下建FytMsys.Web应用程序,选择MVC MVCAPI 单元测试
在FytMsys.Web建一个帮助类库(目前主要实例化业务层也EF上下文的方法)
FytMsys.Web引用Domain.Entity、BusinessLogic.Server
建好后,如图:
在FytMsys.Helper类库下增加类OperateContext
并添加引用关系Domain.Entity、BusinessLogic.Server
并通过NuGet添加EF
类里面的代码如下:
在FytMsys.Web应用程序下的Controllers文件夹下HomeController做测试操作
增加代码
通过这个就可以获得一个对象,并通过Admin的对象,可以查询角色表中的角色名称
表之间的关系:admin表中有,部门表ID ,角色表ID
/*==================================================*/
/*==================================================*/
如果控制器返回Json,EF就会报错,因为表的关系是相互的,在序列化的时候,就造成了死循环,所以Json(model)会抛出异常
/*==================================================*/
/*==================================================*/
2种 解决方法
第一:通过DTO重写用户表,部门表,角色实体
第二:聚合设计(暂不考虑)
第一种方法,太过麻烦,还在在模型类库中建3个类,如果有100个表,50个关系,建起来把骚年也累趴蛋了
通过和大神(台湾的)沟通,他给出的方法是通过Json.Net方式来做或者通过Linq
方案有了,那开整,解决代码如下:
这次调用的是OperateSession.SetContext EF上下直接通过Linq查询实体,返回一个新的模型,这样Json可以满足基本条件了
框架搭好,下一步就是UI设计和前台代码编写了
待续........................
讨论群:86594082 欢迎渣渣和屌丝的加入(尤其是女女)
简易版CMS后台管理系统开发流程
MVC5+EF6 简易版CMS(非接口) 第一章:新建项目
MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型
MVC5+EF6 简易版CMS(非接口) 第三章:数据存储和业务处理
MVC5+EF6 简易版CMS(非接口) 第四章:使用业务层方法,以及关联表解决方案
上一章介绍了,如何建数据层和业务,以及各层之间的引用过关系
这章主要讲解怎么使用业务层的方法。
以及普遍遇到的EF关联查询的问题解决方案
1、在FytMsys.Web文件夹下建FytMsys.Web应用程序,选择MVC MVCAPI 单元测试
在FytMsys.Web建一个帮助类库(目前主要实例化业务层也EF上下文的方法)
FytMsys.Web引用Domain.Entity、BusinessLogic.Server
建好后,如图:
在FytMsys.Helper类库下增加类OperateContext
并添加引用关系Domain.Entity、BusinessLogic.Server
并通过NuGet添加EF
类里面的代码如下:
/// <summary> /// 公用类实例化业务对象 /// </summary> public class OperateContext<T> where T : class,new() { public static BaseServer<T> SetServer = new BaseServer<T>(); } /// <summary> /// 公共实例化数据仓储 /// </summary> public class OperateSession { public static FytSysDbContext SetContext = new FytSysDbContext(); }
在FytMsys.Web应用程序下的Controllers文件夹下HomeController做测试操作
增加代码
//获得一个Admin的实体对象,根据ID=2 public ActionResult GetModels() { var model = OperateContext<Domain.Entity.tb_Admin>.SetServer.GetModel(2); return View(); }
通过这个就可以获得一个对象,并通过Admin的对象,可以查询角色表中的角色名称
表之间的关系:admin表中有,部门表ID ,角色表ID
/*==================================================*/
/*==================================================*/
如果控制器返回Json,EF就会报错,因为表的关系是相互的,在序列化的时候,就造成了死循环,所以Json(model)会抛出异常
/*==================================================*/
/*==================================================*/
2种 解决方法
第一:通过DTO重写用户表,部门表,角色实体
第二:聚合设计(暂不考虑)
第一种方法,太过麻烦,还在在模型类库中建3个类,如果有100个表,50个关系,建起来把骚年也累趴蛋了
通过和大神(台湾的)沟通,他给出的方法是通过Json.Net方式来做或者通过Linq
方案有了,那开整,解决代码如下:
//获得一个Admin的实体对象,根据ID=2 public ActionResult GetModels() { //var model = OperateContext<Domain.Entity.tb_Admin>.SetServer.GetModel(2); var m = OperateSession.SetContext.tb_Admin.Select(c => new { RoName = c.tb_AdminRole.roleName, c.RealName, c.LoginName }); return Json(m, JsonRequestBehavior.AllowGet); }
这次调用的是OperateSession.SetContext EF上下直接通过Linq查询实体,返回一个新的模型,这样Json可以满足基本条件了
框架搭好,下一步就是UI设计和前台代码编写了
待续........................
讨论群:86594082 欢迎渣渣和屌丝的加入(尤其是女女)
相关文章推荐
- MVC5+EF6 简易版CMS(非接口) 第三章:数据存储和业务处理
- MVC5+EF6 简易版CMS(非接口) 第一章:新建项目
- objective-c中对象所有权的内存管理(关于set,get方法),以及如何使用@property来进行简易操作
- MessageQueue.IdleHandler接口使用方法以及原理分析
- iOS在分类中声明属性的方法(不提倡使用)以及关联对象介绍
- socks5代理的使用以及ftp多线程下载的简易方法
- 查看地图接口以及使用方法
- spring RowMapper回调接口的使用 以及jdbc模板提供的queryfor系列的方法摘要
- objective-c中对象所有权的内存管理(关于set,get方法),以及如何使用@property来进行简易操作(九)
- C#中using以及实现接口IDisposable的使用方法
- 本附录介绍iOS系统包含的框架,它们为编写iOS平台的软件提供必要的接口。下面的表格尽可能地列出框架中的类、方法、函数、类型以及常量使用的关键前缀,请避免在您的符号名称中使用这些前缀。
- objective-c中对象所有权的内存管理(关于set,get方法),以及如何使用@property来进行简易操作(九)
- System.Data.SQLite.dll不能编译成AnyCPU问题的解决方案,以及它跨x86和x64的使用方法。
- 接口的定义,使用,以及事件的监听方法
- JAVA之旅(二十一)——泛型的概述以及使用,泛型类,泛型方法,静态泛型方法,泛型接口,泛型限定,通配符
- JAVA之旅(二十一)——泛型的概述以及使用,泛型类,泛型方法,静态泛型方法,泛型接口,泛型限定,通配符
- Swift中对C语言接口缓存的使用以及数组、字符串转为指针类型的方法
- linux 环境下 Access,Modify,Change区别以及find指令简易使用方法
- 【C#】深度理解虚方法 继承 以及接口的简单使用