ASP.NET MVC5 第4章
参考资料《ASP.NET MVC5 高级编程》第5版
第4章 模型
本章所探讨的模型是要显示、保存、创建、更新和删除的对象。
基架指使用 MVC 提供的工具为每个模型对象的标准索引构建、创建、编辑和删除功能构建控制器和视图。这个构建工作称为基架(scaffolding)。
4.1 建模
4.2 构造基架
新建的ASP.NET MVC5 项目会自动包含对实体类框架(EF) 的引用。EF 是一个对象关系映射(object-relational mapping)框架。它知道如何在关系型数据库中保存.NET 对象,还可以利用LINQ 查询语句检索保存在关系型数据库中的.NET 对象。
EF 支持数据库有限、 代码优先和模型优先的开发风格;MVC 基架采用的是代码优先的风格。
EF 需要知道模型属性值的修改时刻,因为它要在这一刻生成一个UPDATE 语句,使这些改变与数据库保持一致。
4.2.2 基架和实体框架
1,代码优先约定
EF 对于外键关系,数据库名称等也有约定。这些约定取代了以前需要提供给一个关系对象映射框架的所有映射和配置。
2,DbContext 类
当使用EF的代码优先方法时,需要使用从EF 的DbContext 类派生出来的一个类来访问数据库。该派生类有一个或多个DbSet <T> 属性,类型中的每一个T 代表一个想要持久保存的对象。
4.2.3 执行基架模板
加载相关对象
- 预加载是使用查询语句加载所有数据。
- 延迟加载是加载时只加载主要对象数据。
4.2.4 执行基架代码
1,用实体框架创建数据库
可以使用两种方式控制上下文的数据库连接。
- 预加载是使用查询语句加载所有数据。
- 延迟加载是加载时只加载主要对象数据。
_MigrationHistory 表
_MigrationHistory 为每次迁移存储代码优先模型的一个压缩版本,从而允许按照需要在各个版本之间迁移数据库。
2.使用数据库初始化器
当我们使用SetInitializer 方法时,需要向其中传一个 IDatabaseInitializer 对象,而框架中自带两个IDatabaseInitializer对象:DropCreateDatabaseAlways 和 DropCreateDatabaseIfModelChanges。
3.播种数据库
调用重写基类的 Seed 方法会将新对象保存到数据库中。
tips:
为免在同一个数据库上多次运行种子方法时添加重复数据。在EF4.3 及更高版本中可以使用DbSet.AddOrUpdate()扩展方法。
4.3 编辑
4.3.1 创建编辑的资源
Edit 视图
当用户点击 form 中的 submit 按钮时,HTML 将发送一个HTTP POST 请求。
4.3.2 响应编辑时的POST 请求
如果模型处于有效状态,Edit 操作将执行以下代码:db.Entry(album).State=EntityState.modified; 这段代码是告诉数据库上下文,该对象在数据库中已存在。
如果模型无效,或数据错误,需要给用户返回错误信息,以便用户改正自身产生的错误。
4.4 模型绑定
4.4.1 DefaultModelBinder
over-posting 攻击:改变不期望被改变的值
4.4.2 显式模型绑定
可以使用控制器中的UpdateModel和TryUpdateModel 方法显式的调用模型绑定。
参考资料《ASP.NET MVC5 高级编程》第5版
ASP.NET MVC5 第4章的更多相关文章
- ASP.NET MVC5 高级编程 第5章 表单和HTML辅助方法
参考资料<ASP.NET MVC5 高级编程>第5版 第5章 表单和HTML辅助方法 5.1 表单的使用 5.1.1 action 和 method 特性 默认情况下,表单发送的是 HTT ...
- ASP.NET MVC5 高级编程 第3章 视图
参考资料<ASP.NET MVC5 高级编程>第5版 第3章 视图 3.1 视图的作用 视图的职责是向用户提供界面. 不像基于文件的框架,ASP.NET Web Forms 和PHP ,视 ...
- ASP.NET MVC5 高级编程 第2章 控制器
参考资料<ASP.NET MVC5 高级编程>第5版 第2章 控制器 控制器:响应用户的HTTP 请求,并将处理的信息返回给浏览器. 2.1 ASP.NET MVC 简介 MVC 模式中的 ...
- ASP.NET MVC5 高级编程-学习日记-第一章 入门
1.1 ASP.NET MVC 简介 ASP.NET是一种构建Web应用程序的框架,它将一般的MVC(Model-View-Controller)模式应用于ASP.NET框架. 1.1.1 MVC模式 ...
- ASP.NET MVC5 与EF6学习系列
最近学习使用MVC5和EF6,博客园搜索了一番,写下这篇文章记录,以便学习使用. 一.ASP.NET MVC5 网站开发 @洞庭夕照写的博客系列 ASP.NET MVC5 网站开发实践 - 概述 AS ...
- ASP.NET MVC5 入门
参考资料<ASP.NET MVC5 高级编程>第5版 第1章 入门 1.1 ASP.NET MVC 简介 ASP.NET MVC是一种构建Web 应用程序的框架,它将一般的MVC(Mode ...
- ASP.NET MVC5(一):ASP.NET MVC概览
ASP.NET MVC概览 ASP.NET MVC是一种构建Web应用程序的框架,它将一般的MVC(Model-View-Controller)模式应用于ASP.NET框架. 1.ASP.NET MV ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](十)
前言 朋友们, 大家好,我还是Rector,写ASP.NET MVC 5系列文章[一步一步创建ASP.NET MVC5程序Repository+Autofac+Automapper+SqlSugar] ...
- 探索ASP.NET MVC5系列
探索ASP.NET MVC5系列之~~~6.Session篇(进程外Session) 探索ASP.NET MVC5系列之~~~5.缓存篇(页面缓存+二级缓存) 探索ASP.NET MV ...
随机推荐
- Python标准库04 文件管理 (部分os包,shutil包)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在操作系统下,用户可以通过操作系统的命令来管理文件,参考linux文件管理相关命令 ...
- CentOS7 安装Redis 3.2.3
$ wget http://download.redis.io/releases/redis-3.2.3.tar.gz $ tar xzf redis-3.2.3.tar.gz $ cd redis- ...
- oracle查看数据库的字符集
注意如果是从旧的数据库复制,一定要保证字符集使用一模一样的,不然会有很多问题(比如汉字在UTF8占3个字符,在GBK占2个字符,所以设置的列宽度要比原来的大才行,不然就会报值太大的错误) select ...
- windows远程桌面端口修改
远程桌面服务所使用的通信协议是Microsoft定义RDP(Reliable Data Protocol)协议,RDP协议的TCP通信端口号是3389.为了安全起见,我们常需要更改其端口. 运行注册表 ...
- C++学习36 string类和字符串
C++大大增强了对字符串的支持,除了可以使用C风格的字符串,还可以使用内置的数据类型 string.string 类处理起字符串来会方便很多,完全可以代替C语言中的 char 数组或 char 指针. ...
- 软件开发过程文档-cgaowei
鸡肋——食之无味,弃之可惜”,软件开发过程文档遭遇了鸡肋一样的境遇. 目前敏捷软件开发过程非常流行.相对于软件开发过程文档,敏捷软件开发过程更加重视可运行的程序.关于软件开发过程文档,两个极端都是不可 ...
- role在标签中的作用是什么?
html 里面的 role 本质上是增强语义性,当现有的HTML标签不能充分表达语义性的时候,就可以借助role来说明.通常这种情况出现在一些自定义的组件上,这样可增强组件的可访问性.可用性和可交互性 ...
- [HDU 3689]Infinite monkey theorem (KMP+概率DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3689 黄老师说得对,题目只有做wa了才会有收获,才会有提高. 题意:一个猴子敲键盘,键盘上有n个键,猴 ...
- ORA-04031 With Leak in "OBJ STAT MEMO" Allocations Seen in V$SGASTAT on 10.2.0.5 (文档 ID 1350050.1)
APPLIES TO: Oracle Server - Enterprise Edition - Version: 10.2.0.5<max_ver> and later [Relea ...
- Ant not found - Make sure it's in the path or use --with-ant-home
# pacman -S apache-ant 参考:http://blog.csdn.net/linshutao/article/details/6638116