参考资料《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. 全文检索引擎Solr系列—–全文检索基本原理

    场景:小时候我们都使用过新华字典,妈妈叫你翻开第38页,找到“坑爹”所在的位置,此时你会怎么查呢?毫无疑问,你的眼睛会从38页的第一个字开始从头至尾地扫描,直到找到“坑爹”二字为止.这种搜索方法叫做顺 ...

  2. 使用Jenkins搭建持续集成服务

    1. 什么是持续集成 持续集成 (Continuous Integration, 简称 CI) 是软件工程中的一种实践, 用于将开发人员不同阶段的工作成果集成起来, 通常一天之中会进行多次. 持续集成 ...

  3. MongoDB 语法使用小结

    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的     他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据 ...

  4. Codeforces 626C Block Towers「贪心」「二分」「数学规律」

    题意: 一堆人用方块盖塔,有n个人每次只能加两块方块,有m个人每次只能加三块方块.要求每个人盖的塔的高度都不一样,保证所用方块数最少,求最高的塔的高度. 0<=n+m  0<=n,m< ...

  5. nyoj 88 汉诺塔(一)

    点击打开链接 汉诺塔(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝 ...

  6. 4.1.1 A - Calendar(简单线性表)(日期查找)(数组应用)

    Description A calendar is a system for measuring time, from hours and minutes, to months and days, a ...

  7. css required,focus,valid和invalid介绍

    本文章来给大家介绍在css3定义required,focus,valid和invalid样式的方法,此方法目前只支持ie9+及ff,gg浏览器哦.css3 提示只适用于高级浏览器:ChromeFire ...

  8. 转 UITabBarController简单介绍

    文顶顶 iOS开发UI篇—UITabBarController简单介绍 iOS开发UI篇—UITabBarController简单介绍 一.简单介绍 UITabBarController和UINavi ...

  9. 《Code Complete》ch.16 控制循环

    WHAT? 反复执行的代码片段(你是第一天学编程吗) WHY? 知道如何使用及何时使用每一种循环是创建高质量软件的一个决定性因素 HOW? 检测位于循环开始/循环结尾 带退出的循环 进入循环 只从一个 ...

  10. junit组合模式应用

    组合模式 定义: 将对象组合成树形结构以表示“部分-整体”的层次结构.Composite模式使得用户对单个对象和组合对象的使用具有一致性 构成: Component:这是一个抽象角色,它给参加组合的对 ...