ASP.Net MVC+EF架构
ASP.Net MVC是UI层的框架,EF是数据访问的逻辑。
如果在Controller中using DbContext,把查询的结果的对象放到cshtml中显示,那么一旦在cshtml中访问关联属性,那么就会报错。因为关联属性可以一致关联下去,很诱惑人,include也来不及。
如果不using也没问题,因为会自动回收,但是这打开了“潘多拉魔盒”,甚至可以在UI层更新数据,相当于把数据逻辑写到了UI层。
有的三层架构中用实体类做Model,这样也是不好的,因为实体类属于DAL层的逻辑。
没有最好的架构,只有最合适的架构! 架构不是设计出来的,而是演化出来的!
一、EO
EO(Entity Object,实体对象) 就是EF中的实体类,对EO的操作会对数据库产生影响。
DTO(Data Transfer Object,数据传输对象),用于在各个层之间传递数据的普通类,DTO有哪些属性取决于其他层要什么数据。DTO一般是扁平类,也就是没有什么关联属性,都是普通类型的属性,一些复杂项目中,数据访问层和业务逻辑层直接传递用一个DTO类,DTO类类似与三层架构中的Model。
EO 相当于DataTable,不能传输到DAL之外; DTO就是三层Model,在各个层中间传输数据用的
VIewModel(视图模型),用来组合来自其他层的数据显示到UI层,简单的数据可能可以直接把DTO交给界面显示,一些复杂的数据可以要重新转换为VIewModel对象。
二、多层架构
搭建一个ASP.NET MVC三层架构项目:DAL、BLL、DTO、UI(asp.net.mvc)。UI、DAL、BLL 都引用DTO;BLL引用DAL;EF中所有的代码都定义到DAL, BLL中只访问DAL、BLL中不要引用DAL中EF的类,不要在BLL中执行Include操作,所有数据准备工作都在DAL中完成
三、架构退化
UI+BLL+DAL => UI+Service
合适的架构:能够满足当前项目的要求,并且适度的考虑以后的项目的发展,不要想的太远,不要“过度架构”,让新手能够快速入手
UI项目虽然不直接访问EF中的类,但是仍然需要在UI项目的App.config(Web.config)中对EF做配置,也要在项目中通过Nuget安装EF,并且把连接字符串配置在UI的web.config中
ASP.Net MVC+EF架构的更多相关文章
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...
- 转载——Asp.Net MVC+EF+三层架构的完整搭建过程
转载http://www.cnblogs.com/zzqvq/p/5816091.html Asp.Net MVC+EF+三层架构的完整搭建过程 架构图: 使用的数据库: 一张公司的员工信息表,测试数 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(23)-设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用
ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2):数据库访问层的设计Demo (3):面向接口编程 (4 ):业务逻辑层的封装 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列
http://www.cnblogs.com/hanyinglong/archive/2013/03/22/2976478.html ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开 ...
- Asp.net mvc项目架构分享系列之架构概览
Asp.net mvc项目架构分享系列之架构概览 Contents 系列一[架构概览] 0.项目简介 1.项目解决方案分层方案 2.所用到的技术 3.项目引用关系 系列二[架构搭建初步] 4.项目架构 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(8)-DbSession线程内唯一
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(8)-DbSession线程内唯一 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(6)- EF上下文实例管理
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(6)- EF上下文实例管理 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 ( ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2) ...
随机推荐
- 关于Content-Type: multipart/form-data的支持
关于Content-Type: multipart/form-data的支持 发布于 537天前 作者 yzhang226 303 次浏览 复制 上一个帖子 下一个帖子 标签: 无 今天 ...
- ios RSA 验签加密解密
关于公钥和私钥的生成,网上有很多本地生产的方法,我遇到的问题是,按照网上生产的方式生成7个文件,本地使用没有问题,但是和后台交互就不行了. 发现生成公钥和私钥的没有那么麻烦,使用在线生产工具就能使用, ...
- centos7 kvm安装使用
kvm简介 KVM 全称是 Kernel-Based Virtual Machine.也就是说 KVM 是基于 Linux 内核实现的. KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU ...
- prepareStatament和Statement和callableStatement的区别
关系与区别 Statement.PreparedStatement和CallableStatement都是接口(interface) Statement 1.Statement接口提供了执行语句和获取 ...
- 使用筛法在 O(logN) 的时间内查询多组数的素数因子
Prime Factorization using Sieve O(log n) for multiple queries 使用筛法在 O(logN) 的时间内查询多组数的素数因子 前言 通常, 我们 ...
- idea和eclipse中getAbsolutePath()方法获取值不同
项目中,使用嵌入式tomcat启动web工程(具体使用请度娘,关键字: tomcat embeded) 启动时,设置tomcat path的代码如下: Embedded tomcat = new Em ...
- 史上最简单的SpringCloud教程 | 第十二篇: 断路器监控(Hystrix Dashboard)
转载请标明出处: 首发于:https://www.fangzhipeng.com/springcloud/2017/07/12/sc12-hystix-dashbd/ 本文出自方志朋的博客 最新Fin ...
- java 打印流 递归复制子文件子文件夹 不同编码文件复制到同一文件中 序列化流反序列化流
package com.swift.jinjie; import java.io.BufferedInputStream; import java.io.File; import java.io.Fi ...
- CharSquence 接口的作用,多态以增强String
CharSquence 接口的作用,多态以增强String,CharSquence 可以多态定义 String StringBuffer StringBuilder.
- logrus学习笔记
logrus源码:https://github.com/sirupsen/logrus 1.logrus.Entry结构 1.1 类型 type Entry struct { Logger *Logg ...