—高级软件人才实作培训专家北京传智播客教育从入门到精通讲师:马伦—高级软件人才实作培训专家准备工作开发环境:VS2010SqlServer2008ExpressMVC2.0VS2008安装MVC2.0请参考:MVC3.0已经发布,但是目前用的最多的是MVC2.0—高级软件人才实作培训专家课程安排EF知识点的补充MVC基础知识介绍MVC与三层应用举例MVC展望…—高级软件人才实作培训专家实体框架(EntityFramework)简介简称EF与ADO.NET关系ADO.NETEntityFramework是微软以ADO.NET为基础所发展出来的对象关系对应(O/RMapping)解决方案,早期被称为ObjectSpace,现已经包含在VisualStudio2008ServicePack1以及.NETFramework3.5ServicePack1中发表。实体框架EntityFramework是ADO.NET中的一组支持开发面向数据的软件应用程序的技术。是微软的一个ORM框架。—高级软件人才实作培训专家什么是O/RMapping广义上,ORM指的是面向对象的对象模型和关系型数据库的数据结构之间的相互转换。狭义上,ORM可以被认为是,基于关系型数据库的数据存储,实现一个虚拟的面向对象的数据访问接口。理想情况下,基于这样一个面向对象的接口,持久化一个OO对象应该不需要要了解任何关系型数据库存储数据的实现细节。—高级软件人才实作培训专家ORMinEF在EF中的实体数据模型(EDM)由以下三种模型和具有相应文件扩展名的映射文件进行定义。·概念架构定义语言文件(.csdl)--定义概念模型。R·存储架构定义语言文件(.ssdl)--定义存储模型(又称逻辑模型O)。·映射规范语言文件(.msl)--定义存储模型与概念模型之间的映射M。实体框架使用这些基于XML的模型和映射文件将对概念模型中的实体和关系的创建、读取、更新和删除操作转换为数据源中的等效操作。EDM甚至支持将概念模型中的实体映射到数据源中的存储过程。演示:在项目中添加一个实体类,并做插入操作。—高级软件人才实作培训专家EF中操作数据库的网关ObjectContext封装.NETFramework和数据库之间的连接。此类用作“创建”、“读取”、“更新”和“删除”操作的网关。ObjectContext类为主类,用于与作为对象(这些对象为EDM中定义的实体类型的实例)的数据进行交互。ObjectContext类的实例封装以下内容:a)到数据库的连接,以EntityConnection对象的形式封装。b)描述该模型的元数据,以MetadataWorkspace对象的形式封装c)用于管理缓存中持久保存的对象的ObjectStateManager对象—高级软件人才实作培训专家图说EF—高级软件人才实作培训专家图说EF—高级软件人才实作培训专家EF增删查改演示演示EFCodeFirst的编程方式第一步:创建控制台项目第二步:添加新建项目→Ado.Net实体模型第三步:添加实体:Customer,添加几个必要的测试字段第四步:添加实体之间的联系第五步:根据模型生成数据库脚本,并执行sql脚本创建数据库第六步:写增删改查来讲解EF的基本使用—高级软件人才实作培训专家IQueryable接口与IEnumberable区别IQueryable接口与IEnumberable接口的区别:IEnumerableT泛型类在调用自己的SKip和Take等扩展方法之前数据就已经加载在本地内存里了,而IQueryableT是将Skip,take这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令。也是延迟在我要真正显示数据的时候才执行。演示linqtoef中使用Ienumberable与Iqueryable的区别,要用到的SQLServerProfiler工具—高级软件人才实作培训专家练习用EFCodeFrist方式创建一个User表。并实现对User表的增删查改(CRUD)(参考上课的例子)—高级软件人才实作培训专家EF学习资源学习资料:英文参考书—高级软件人才实作培训专家Asp.NetWeb开发方式WebFrom开发Asp.NetMVC开发MVC是微软2009对外公布的第一个开源的表示层框架,这是微软的第一个开源项目MVC目的不是取代WebFrom开发,只是web开发的另外一种选择—高级软件人才实作培训专家WebForm模型—高级软件人才实作培训专家WebFormsVsMVCWebForm优点1、支持事件模型开发。得益于丰富的服务器端组件,webfrom开发可以迅速的搭建web应用2、使用方便,入门容易3、控件丰富WebFrom缺点1、封装太强,很多底层东西让我们初学者不是很明白2、入门容易,提升很难3、复杂的生命周期模型学习起来并不容易4、控制不灵活5、ViewState处理—高级软件人才实作培训专家WebFormsVsMVCMVC优点1、很容易将复杂的应用分成M、V、C三个组件模型通过model、view和controller有效的简化了复杂的架构,体现了很好的隔离原则2、因为没有使用server-basedforms。所以我们程序员控制的更加灵活,页面加干净3、可以控制生成自定义的url。对于seo友好的url更是不在话下4、强类型View实现,更安全、更可靠、更高效。5、让web开发可以专注于某一层。更利于分工配合适用于大型架构开发6、很多企业已经使用MVC作为项目开发框架,招聘明确要求熟悉MVC开发模式,我现在做的项目架构就是mvc+ef+wcf+…—高级软件人才实作培训专家Asp.NetMVC简介Asp.NetMVC模式是一种表现模式。它将web应用程序分成三个主要组件即:Model、View、ControllerM:Model主要是存储或者是处理数据的组件Model其实是实现业务逻辑层对实体类相应数据库操作,如:CRUD(C:Create/R:Read/U:Update/D:Delete)。它包括数据、验证规则、数据访问和业务逻辑等应用程序信息。V:View是用户接口层组件。主要是将Model中的数据展示给用户C:Controller处理用户交互,从model中获取数据并将数据传给指定的view—高级软件人才实作培训专家MVC请求模型—高级软件人才实作培训专家借用WebFrom理解MVC新建WebFrom项目Label的例子在page类中添加一个List在前台用for循环遍历显示list分层思想WebFromCodebehindMVC代码和页面彻底分离—高级软件人才实作培训专家Asp.NetMVC第一个程序新建一个MVC项目认识Web项目中的Controller认识Web项目中的View认识Web项目中的Model—高级软件人才实作培训专家约定大于配置Controller放到controllers文件夹中,并且命名方式以XxController结尾每个Controller都对应View中的一个文件夹,文件夹的名称跟Controller名相同Controller中的方法名都对应一个View(非必须,但是建议这么做)而且View的名字跟Action的名字相同—高级软件人才实作培训专家开发流程(转变)新建Controller创建Action根据Action创建View在Action获取数据并生产ActionResult传递给View。View是显示数据的模板url请求→Controller.Action处理→View响应—高级软件人才实作培训专家练习---熟悉M、V、C新建一个Mvc项目(项目名称:MVCDemo)熟悉项目中文件的作用新建一个Controller名字为CustomController,并添加index方法View中新建一个Custom文件夹,并创建index视图在创建的index方法中传递数据到view并显示—高级软件人才实作培训专家Asp.NetMVC组件之间的关系View和Controller都可以直接请求Model但是Model不依赖View和controllerController可以直接请求View来显示具体页面View不依赖Controller其实:View可以通过另外的方式来请求Controller—高级软件人才实作培训专家深入讲解Model包括数据、验证规则、数据访问和业务逻辑等应用程序信息它是我们Web应用的主框架Model调用的是我们的业务逻辑层再次强调:Model是独立的组件,它并不知道View的存在,更不知道Controller的存在。这两个分离的理解很重要!—高级软件人才实作培训专家深入讲解ModelModel包括数据,对数据的操作与Model相关的设计方式企业级项目的架构方式实例(演示)—高级软件人才实作培训专家深入讲解View注意:view是负责输出显示数据,而非样式View中的弱类型ViewData[“”]View中的强类型ViewData.ModelHtml.Encode=%:%Html.Helper类Html.Helper扩展客户端验证MVC中智能提示怎么来的!—高级软件人才实作培训专家弱类型ViewData[“”]例如:Controller中代码如下在前台View中使用:—高级软件人才实作培训专家View中的强类型ViewData[Model]在Controller中代码如下:在view前台使用代码如下:—高级软件人才实作培训专家Html.Encode%:%相当于%=Html.Encode()%推荐大家使用%:%,方便简洁—高级软件人才实作培训专家Html.Helper类支持强类型(1):Html.xxFor—高级软件人才实作培训专家实例在model中创建Techer类演示以弱类型方式将实体类展现到View演示以强类型方式将实体类展现到View强类型的实质:在aspx页面的最上方加入的指令:%@PageLanguage=C#Inherits=System.Web.Mvc.ViewPageIEnumerableMvcApplication1.Models.Class%红色部分就是ViewPage属性:Model的具体类型,如果不指定具体的类型,则为dynamic—高级软件人才实作培训专家Html.Helper类强类型(2):Html.xx(“”)%:Html.TextBox(Id)%—高级软件人才实作培训专家Html.Helper类——DropDownListvaritems=newListSelectListItem(){(newSelectListItem(){Text=001,Value=1,Selected=false}),(newSelectListItem(){Text=002,Value=2,Selected=false})};将items值给ViewData:ViewData[items]=items;在aspx中这样使用:%:Html.DropDownList(items)%生成的代码中,items将作为select标签的name和id值。—高级软件人才实作培训专家Html.Helper类—CheckBox&RadioButton%:Html.CheckBox(“bookType”)%在Controller获取提交的值为(true,false)未操作true选择fa