目录

简易版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();
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(非接口) 第四章:使用业务层方法,以及关联表解决方案的更多相关文章

  1. MVC5+EF6 简易版CMS(非接口) 第三章:数据存储和业务处理

    目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...

  2. MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型

    目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...

  3. MVC5+EF6 简易版CMS(非接口) 第一章:新建项目

    目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...

  4. 简易版CMS后台管理系统开发流程

    目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...

  5. 计算机图形学 opengl版本 第三版------胡事民 第四章 图形学中的向量工具

    计算机图形学 opengl版本 第三版------胡事民 第四章  图形学中的向量工具 一   基础 1:向量分析和变换   两个工具  可以设计出各种几何对象 点和向量基于坐标系定义 拇指指向z轴正 ...

  6. 《数据结构与算法(C语言版)》严蔚敏 | 第四章课本案例

    //二叉树的顺序存储表示 #define MAXTSIZE 100 typedef TElemtype SqBiTree[MAXTSIZE]; SqBiTree bt; //二叉树的二叉链表存储表示 ...

  7. 算法导论(第三版)Exercises4.2(第四章二节)

    4.2-1(计算结果) 18  14 62  66 4.2-2(Strassen算法计算矩阵乘法) void multiplyMatrix(int a[], int b[], int n, int r ...

  8. o'Reill的SVG精髓(第二版)学习笔记——第四章

    第四章:基本形状 4.1线段 SVG可以使用<line>元素画出一条直线段.使用时只需要指定线段起止点的x和y坐标即可.指定坐标时可以不带单位,此时会使用用户坐标,也可以带上单位,如em. ...

  9. ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(持续更新中...)

    开发工具:VS2015(2012以上)+SQL2008R2以上数据库  您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB  升级后界面效果如下: 任务调度系统界面 http: ...

随机推荐

  1. 解决json日期格式问题的3种方法

    这篇文章主要介绍了解决json日期格式问题的3种方法 ,需要的朋友可以参考下 开发中有时候需要从服务器端返回json格式的数据,在后台代码中如果有DateTime类型的数据使用系统自带的工具类序列化后 ...

  2. es6 static

    static 定义的是类的方法只有类能调用,而普通方法是实例的方法只有类实例能调用.变量也一样. class A { static fn() { console.log('sss'); } fn2() ...

  3. 初学Python之异步多线程:sockserver

    异步多线程:服务端 import socketserver class MyServer(socketserver.BaseRequestHandler): def setup(self): pass ...

  4. python几个重要的模块备忘

    一:模块使用方法 二:时间模块time 三:系统接口模块os和sys 四:数据保存的几个模块json,pickle,xml,configparse 五:数据复制移动模块shutil 六:日志模块log ...

  5. 修改tomcat应用日志默认编码格式

    前言 今天开发跟我说tomcat日志中的中文不能正常显示,根据以往的经验,我觉得可能跟服务器的编码有关,于是尝试各种方法,但还是没能解决问题. 后来我突然想到会不会跟tomcat的设置有关呢,于是在网 ...

  6. KBMMW 4.93.10 发布

    例行更新,主要是bugfix. 4.93.10 June 4 2016 Important notes (changes that may break existing code) ========= ...

  7. java提高篇之理解java的三大特性——多态

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

  8. DataSnap修改数据ApplyUpdates出现错误:连接繁忙导致另一个命令

    最近准备尝试用DBExpress做个SQL Serer应用,在学习的时候发现一个问题使用DBExpress连接Sql server 2008 express使用以下控件SQLConnection-&g ...

  9. Play1+angularjs+bootstrap ++ (idea + livereload)

    我的web开发最强组合:Play1+angularjs+bootstrap ++ (idea + livereload) 时间 2012-12-26 20:57:26  Freewind.me原文   ...

  10. 获取HTML

    public class GetHtml { public string GetWebRequest(string url) { Uri uri = new Uri(url); WebRequest ...