参考资料《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章的更多相关文章

  1. ASP.NET MVC5 高级编程 第5章 表单和HTML辅助方法

    参考资料<ASP.NET MVC5 高级编程>第5版 第5章 表单和HTML辅助方法 5.1 表单的使用 5.1.1 action 和 method 特性 默认情况下,表单发送的是 HTT ...

  2. ASP.NET MVC5 高级编程 第3章 视图

    参考资料<ASP.NET MVC5 高级编程>第5版 第3章 视图 3.1 视图的作用 视图的职责是向用户提供界面. 不像基于文件的框架,ASP.NET Web Forms 和PHP ,视 ...

  3. ASP.NET MVC5 高级编程 第2章 控制器

    参考资料<ASP.NET MVC5 高级编程>第5版 第2章 控制器 控制器:响应用户的HTTP 请求,并将处理的信息返回给浏览器. 2.1 ASP.NET MVC 简介 MVC 模式中的 ...

  4. ASP.NET MVC5 高级编程-学习日记-第一章 入门

    1.1 ASP.NET MVC 简介 ASP.NET是一种构建Web应用程序的框架,它将一般的MVC(Model-View-Controller)模式应用于ASP.NET框架. 1.1.1 MVC模式 ...

  5. ASP.NET MVC5 与EF6学习系列

    最近学习使用MVC5和EF6,博客园搜索了一番,写下这篇文章记录,以便学习使用. 一.ASP.NET MVC5 网站开发 @洞庭夕照写的博客系列 ASP.NET MVC5 网站开发实践 - 概述 AS ...

  6. ASP.NET MVC5 入门

    参考资料<ASP.NET MVC5 高级编程>第5版 第1章 入门 1.1 ASP.NET MVC 简介 ASP.NET MVC是一种构建Web 应用程序的框架,它将一般的MVC(Mode ...

  7. ASP.NET MVC5(一):ASP.NET MVC概览

    ASP.NET MVC概览 ASP.NET MVC是一种构建Web应用程序的框架,它将一般的MVC(Model-View-Controller)模式应用于ASP.NET框架. 1.ASP.NET MV ...

  8. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](十)

    前言 朋友们, 大家好,我还是Rector,写ASP.NET MVC 5系列文章[一步一步创建ASP.NET MVC5程序Repository+Autofac+Automapper+SqlSugar] ...

  9. 探索ASP.NET MVC5系列

    探索ASP.NET MVC5系列之~~~6.Session篇(进程外Session)     探索ASP.NET MVC5系列之~~~5.缓存篇(页面缓存+二级缓存)     探索ASP.NET MV ...

随机推荐

  1. Servlet中的cookie和session

    保存数据的2中方式 Cookie Session Cookie 我们可以将一些信息保存到cookie中,cookie存放在对应的浏览器目录里面.每个站点可以保存20个cookie,最大长度不超过4k. ...

  2. 使用tcpdump+Wireshark(或Fiddler)做linux服务器的网络请求分析

    我们的服务器上,一般都没有窗口界面,这时候要抓包,用tcpdump是最方便的.而分析网络请求时,wireshark又是相当方便的,这时候我们就需要把它们两个一起来使用了. tcpdump 抓取数据 命 ...

  3. 使用 Heka 导入自定义的nginx日志到Elasticsearch

    重置Heka执行进度 heka的进度配置文件存在配置项 base_dir 设置的目录,只需要删除这个文件夹下面的内容,就可以完全重置heka的进度. base_dir 配置项默认是在下面目录: '/v ...

  4. types.MethodType

    http://stackoverflow.com/questions/972/adding-a-method-to-an-existing-object-instance 532down voteac ...

  5. FreeMarker中List排序

    有时候需要在页面上对list排序,虽然也可以在后台代码中完成,但这个可能要看具体情况.排序的样本代码如下: <#list resultMap.topViewList?sort_by(" ...

  6. JavaScript对象的创建之工厂方法

    通过工厂的方式来创建Person对象,在createPerson中创建一个对象,然后为这个对象设置相应的属性和方法,之后返回这个对象. function createPerson(name, age) ...

  7. 接口自动化的根基--HTTP协议

    点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...

  8. 实时阴影渲染(一):PSSM平行分割阴影图

    PSSM(Parallel Split Shadow Map)平行分割阴影图,是一种根据距离远近采用多个深度纹理渲染阴影的方法 适合用于室外大场景中的平行光比如太阳形成的阴影 本系列需要读者了解基本的 ...

  9. python实现批量ping IP,并将结果写入

    最近工作需要,写了一个Python小脚本,分享给大家,因为公司的IP用的差不多了,然后离职人员的IP有没有及时删除,导致没多少IP用了,所以做了一个python脚本跑了跑,清出来一堆ping不通的IP ...

  10. FlashBuilder的快捷键

    Ctrl-F11: 执行(Run) F11: 除错(Debug) Ctrl-Alt-Down: 重复目前所在编辑列(Repeat current line ) Alt-Up: 移动本列,或选择列往上移 ...