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

目录

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

 

posted @ 2015-05-06 12:57  Jason.裕哥  阅读(1029)  评论(0编辑  收藏  举报