1/43EntityFramework初体验ORM技术回顾DatabaseORMApplicationORM的优势快速开发方便移植数据库Objects2/43ORM框架流行的ORM框架HibernateMyBatisTopLink.NET世界的ORM框架NHibernateMyBatis.NETLINQtoSQLADO.NETEntityFramework3/43EntityFramework体系结构ObjectServicesEntityClientADO.NETProviderEDMMetaDataDatabaseCSDLMSLSSDL4/43EDM简介EDM(EntityDataModel)-实体数据模型负责将关系数据库模型映射为实体数据模型EDM结构SSDL存储模型表字段1字段2CSDL概念模型实体属性1属性2MSL映射实体.属性1-表.字段1实体.属性2-表.字段2数据库表字段1字段25/43体验EntityFramework由数据库生成EDM以“ADO.NET实体数据模型”为模板演示示例1:由学生数据库生成EDM6/43数据库连接字符串EntityFramework连接字符串示例connectionStringsaddname=MySchoolEntitiesconnectionString=metadata=res://*/MySchool.csdl|res://*/MySchool.ssdl|res://*/MySchool.msl;provider=System.Data.SqlClient;providerconnectionstring="datasource=.;initialcatalog=MySchool;integratedsecurity=True;MultipleActiveResultSets=True;App=EntityFramework"providerName=System.Data.EntityClient//connectionStrings7/43实体数据模型实体数据模型的项目结构EDM元数据文件数据上下文类实体类8/43EDM元数据EDM设计器模式和XML结构9/43实体类学生实体类示例publicpartialclassStudent{publicStudent(){this.Results=newHashSetResult();}publicintStudentNo{get;set;}publicstringLoginPwd{get;set;}//省略代码...publicstringEmail{get;set;}publicvirtualGradeGrade{get;set;}//年级publicvirtualICollectionResultResults{get;set;}//成绩}导航属性(关系)10/43数据上下文类学生数据库数据上下文类示例publicpartialclassMySchoolEntities:DbContext{publicMySchoolEntities():base(name=MySchoolEntities){}publicDbSetAdminAdmins{get;set;}publicDbSetGradeGrades{get;set;}publicDbSetResultResults{get;set;}publicDbSetStudentStudents{get;set;}publicDbSetSubjectSubjects{get;set;}publicDbSetTeacherTeachers{get;set;}}DbContext-实体对象容器,操作数据库的工具11/43使用EF查询单表数据DbSetT基类IEnumerableTSource的数据查询方法IQueryableTSourceWhereTSource(ExpressionFuncTSource,boolpredicate)TSourceSingleOrDefaultTSource(ExpressionFuncTSource,boolpredicate)演示示例2:使用EF查询单表数据12/43关键代码回顾查询年级编号和指定条件的学生using(MySchoolEntitiesentities=newMySchoolEntities()){Gradegrade=entities.Grades.SingleOrDefault(g=g.GradeName==S2);if(grade!=null){Console.WriteLine(S2年级的编号为{0},grade.GradeId);}IQueryableStudentquery=entities.Students.Where(s=s.Gender==男&&s.GradeId==grade.GradeId);ListStudentstus=query.ToList();foreach(varstuinstus){Console.WriteLine({0}\t{1},stu.StudentNo,stu.StudentName);}}示例13/43using(MySchoolEntitiesentities=newMySchoolEntities()){entities.Students.Add(newStudent(){LoginPwd=123,StudentName=百福美});if(entities.SaveChanges()0){Console.WriteLine(添加数据成功!);}}使用EF添加数据使用EF添加数据的基本步骤1.使用DbSetT的Add()方法2.使用DbContext的SaveChanges()方法示例演示示例3:使用EF添加数据14/43使用EF修改数据使用EF修改数据的基本步骤1、从DbContext获取实体2、修改属性值3、使用DbContext的SaveChanges()方法using(MySchoolEntitiesentities=newMySchoolEntities()){Studentstu=entities.Students.FirstOrDefault(s=s.StudentName==百福美);if(stu!=null){stu.LoginPwd=123456;}if(entities.SaveChanges()0){}}示例演示示例4:使用EF修改数据15/43使用EF删除数据使用EF删除数据的基本步骤1、从DbContext获取实体2、使用DbSetT的Remove()方法3、使用DbContext的SaveChanges()方法using(MySchoolEntitiesentities=newMySchoolEntities()){Studentstu=entities.Students.FirstOrDefault(s=s.StudentName==百福美);if(stu!=null){entities.Students.Remove(stu);//从集合中删除学生对象}if(entities.SaveChanges()0){}}示例演示示例5:使用EF删除数据16/43视图引擎简介视图引擎-把视图解析成浏览器可执行的代码独立的视图解析API对应不同的视图语法规则ASP.NETMVC视图引擎支持自由扩展17/43Razor视图引擎Razor视图引擎-更简洁优雅的视图Razor视图特征:@符号和cshtml文件扩展名母版视图初始化演示示例6:创建Razor视图项目18/43Razor母版视图_Layout.cshtml文件结构!DOCTYPEhtmlhtmlheadmetacharset=utf-8/metaname=viewportcontent=width=device-width/title@ViewBag.Title/title@Styles.Render(~/Content/css)@Scripts.Render(~/bundles/modernizr)/headbody@RenderBody()@Scripts.Render(~/bundles/jquery)@RenderSection(scripts,required:false)/body/html呈现页面内容类似于ContentPlaceHolder19/43Razor普通视图普通视图文件结构@{ViewBag.Title=Index;Layout=~/Views/Shared/_Layout.cshtml;}@sectionscripts{scripttype=text/javascript/script}页面内容RenderSection()呈现内容RenderBody()呈现内容20/43Razor视图可用APIRazor视图类型21/43Razor视图语法规则5-1Razor表达式语法@(expression)或@expression示例@DateTime.Now//输出时间@Html.TextBox(Name)//调用方法@(razor视图.ToString())//输出字符串22/43Razor视图语法规则5-2Razor代码块语法@{code}示例@{varstu=newRazorDemo.Models.Student();stu.StudentName=王五;stu.Gender=男;p姓名:@stu.StudentName/pp性别:@stu.Gender/p}23/43Razor视图语法规则5-3循环结构或条件结构语法@foreach(…){}或@if(…){}else{}示例@foreach(varstuinstudents){p姓名:@stu.StudentName/pp性别:@stu.Gender/p}@if(stu.Gender==男){p姓名:@stu.StudentName/pp性别:@stu.Gender/p}24/43Razor视图语法规则5-4输出特殊字符@语法@@示例p@@2013copyright/p@@.com语法@model类型示例@modelIEnumerableRazorDemo.Models.Student模型的声明25/43Razor视图语法规则5-5引用命名空间语法@using命名空间示例@usingRazorDemo.Models语法@*被注释的内容*@示例@*@{varstu=newRazorDemo.Models.Student();}*@注释26/43总结实体框架Razor视图EF体系结构ADO.NET实体数据模型操作单表数据EntityFramework初体验视图引擎的概念以@为关键字的视图语法核心API:Render(),RenderSection(),RenderBody()27/43CSDLSSDLMSLADO.NETProviderObjectServicesEntityClientEntityDataModeledmx中xml格式文件结构数据上下文类实体代码的结构查询数据:Where(),SingleOrDefault()添加数据:Add(),SaveChanges()修改数据:SaveChanges()删除数据:Remove(),SaveChanges()