MVC5+EF6 简易版CMS(非接口) 第四章:使用业务层方法,以及关联表解决方案

时间:2022-06-07 15:14:04

目录

简易版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

建好后,如图:

MVC5+EF6 简易版CMS(非接口) 第四章:使用业务层方法,以及关联表解决方案

在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();
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    欢迎渣渣和屌丝的加入(尤其是女女)