摘要: 在上一章中您学习了如何使用EntityFramework和SQL Server Compact创建一个ASP.NET MVC程序存储展示数据,在本章中您将学习如何在控制器和视图中对自动生成的增删改查代码进行自定义。注意:为了在您的控制器和数据访问层中创建一个抽象层,通常的做法是实现一个“库模式”。不过为了使得这些教程变得更加简单,暂且不必实现此模式,我们将在稍后的“实现单元工作库模式”中得以完成。本章中您要创建以下一系列页面:【创建一个详细信息页】Index页面默认架构忽略了Enrollments属性,那是因为这是一个集合属性。在详细信息页中你将通过一个Html表展示此一系列内容。在“Cont阅读全文
posted @ 2012-04-27 20:35 Serviceboy 阅读(991) 评论(0) 编辑
摘要: 在前几篇中你已经处理了由3个实体组成的数据模型,本章节中您将添加更多的数据实体以及关系,并且充分利用数据标注属性进一步地控制模型类的行为。以下便是当你完成这次任务之后完整的数据类模型:【使用属性控制格式化数据、数据验证及数据库映射】在这部分您将可以看到用于数据模型类的属性的若干例子,用以控制数据的格式化,验证以及数据库的映射。接着在稍后几章中您将创建一个完整的School数据模型,您通过对已经创建的类添加属性,并且通过创建新类用于维护模型中的实体类型。1)DisplayFormat属性:对于学生选课日期可能你在乎的仅是“日期”,但是显示的结果却都带有时间;使用数据标记属性你只需做一步代码的改变阅读全文
posted @ 2012-04-27 17:15 Serviceboy 阅读(768) 评论(0) 编辑
摘要: 上一章中您已经为Students实体集实现了不同页面的增删改查的功能,本章中您将为Index页面给Students增加分页、过滤以及排序功能。你将创建一个实现简单分组功能的页面。以下就是即将你要看到的效果——列标题变得可以点击,我们可以通过点击对特定列进行排序;重复点击同意标题两次将会导致对该列进行“升序”或是“降序”排列。【对Students的Index页面增加排序列】为了增加排序列,你应当在Student控制器的Index方法中做如下变化:1)对Index方法增加排序功能:在“Controllers\StudentController.cs”文件里用以下代码替换Index方法中的代码:pu阅读全文
posted @ 2012-04-27 17:14 Serviceboy 阅读(722) 评论(0) 编辑
摘要: 前一章你已经学会如何显示相关数据,在本章中你将学会如何更新相关数据。大部分情况下更新只需通过更新对应的外键字段即可完成,不过对“多对多”关系而言,由于EF不是直接暴露那个中间连接表,因此你不得不“显式”从对应的导航属性中增加或者删除实体得以完成。以下一些截图是你今日要完成的任务:【为Courses自定义“新增”和“编辑”页面】当一个新课程创建之时,它总是隶属于某一个特定的系;为方便期间,自生成“创建”和“编辑”的代码架构中就包含了一个可供选择“系”的下拉列表。下拉框设置了Department的Id,这是所有EntityFramework实体都有的,为了把正确的Department加载到Cour阅读全文
posted @ 2012-04-27 17:13 Serviceboy 阅读(553) 评论(0) 编辑
摘要: 在前一章中你完成了复杂的学校数据模型,在本章节中你将读取并且展示这些相关数据——也就是EntityFramework加载到导航属性中的那些数据。以下截图展示你要完成的效果:【慢模式、饥饿模式以及显式加载相关数据】EntityFramework有几种方式把数据加载到导航属性中:1)慢模式:当实体第一次被读取的时候,相关的导航属性数据并未加载;当你第一次访问该导航属性的时候才使得导航属性的数据被加入。这会对数据库产生多个请求——一个是实体自身数据的加载,另外一个则是实体中那个导航属性相关数据每次的加载:2)饥饿模式:当实体被读取时,相关属性数据同时被加载;这会产生一个对数据库的请求以便加载相关全部阅读全文
posted @ 2012-04-27 17:13 Serviceboy 阅读(651) 评论(2) 编辑
摘要: 上两章中你已经学会如何处理相关数据,本章将介绍如何处理并发冲突。为此你将创建若干页面处理Department信息,编辑删除Department信息的页面将采用并发冲突机制。以下一些截图展示了在Index和Delete页面中的状况,以及当检测到并发冲突的时候所显现的一些错误信息。【并发冲突】“并发冲突”就是指一个用户准备编辑一条实体记录的,同时另外一个用户在该用户之前已更新了同样的消息。倘若你不设置相关检测并发冲突的机制,那么永远是最后一个客户的变更信息覆盖先前一切更改。在许多情形下此风险是可以接受的(比如用户数量极少,更新也极少,或是即便一些数据被覆盖了也并不足以致命……),因此此时使用并发冲阅读全文
posted @ 2012-04-27 17:12 Serviceboy 阅读(743) 评论(0) 编辑
摘要: 上一章中你通过继承已经减少了Instructor和Student类中的冗余代码,本章节中你将使用一些封装好的单元工作类去完成增删改查的任务。像上一章一样,你将改变代码与已经创建的页面间的工作方式,并非需要额外创建新页面。【封装单元代码工作】“封装单元代码工作”方式将在一个应用程序的“数据访问层”和“业务逻辑层”之间创建一个抽象层,通过实现此设计方式可以把你的程序从数据存储变化中隔离开来,同时便于“自动单元化测试”或者是“驱动测试开发(TDD)”。本章节中你要为每一个类型实现一个存储封装类:对于Student类型而言你将创建存储封装接口,以及实现的对应类;当你在控制器中实例化这个存储接口时,你将阅读全文
posted @ 2012-04-27 17:11 Serviceboy 阅读(559) 评论(0) 编辑
摘要: 上一章你学习了继承,本章中你将学习如何在数据模型中实现继承。在“面向对象”的编程中你通常使用“继承”避免冗余代码,本章中你将让Instructor和Student两个模型类分别继承基本类Person,该类包含基本的共有属性(比如LastName等)。对于视图页面您无需做任何更改,不过你可能需要稍微更改一些代码,并且这些改变会在数据库中反映出来。【树形表结构VS继承表结构】在“面向对象”编程中,你使用继承使得相关类编码变得更为简单。举例来说——Instructor和Student两个模型类共享一些属性,结果导致了冗余代码的产生:假如你想消除由于Instructor和Student共享属性而带来的阅读全文
posted @ 2012-04-27 17:11 Serviceboy 阅读(376) 评论(0) 编辑
摘要: 前一章你已经完成了存储类以及单元工作类的设计,本章中将包含下列内容:1)处理原生态的SQL语句请求。2)处理“无跟踪”的请求。3)测试发送到数据库的请求。4)与代理类配合协同工作。5)禁用自动变化检测机制。6)禁用数据保存前验证机制。以上大部分内容你将配合以创建的页面进行处理。为了使用原生态的SQL语句更新对应相关记录,您需要创建一个新页面用以批量更新数据库中全部课程学分所对应的那个编号。为使用“无跟踪”请求,你需要额外对Department的Edit(编辑)页面追加一个新的验证逻辑:【处理“原生态”SQL命令】EntityFramework(代码优先)API方法允许你把SQL命令直接送入数据阅读全文
posted @ 2012-04-27 17:10 Serviceboy 阅读(1069) 评论(1) 编辑
摘要: 原文:http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application【序】Contoso大学示例程序为您演示了如何使用EntityFramework技术来创建一个完整的ASP.NET MVC程序,这个示例是一个虚拟大学的网站,它包含了诸如“学生注册”、“课程创建”以及“指定授课讲师”等虚拟功能。这个教程系列解释了如何一步步地去创建一个完整的Contoso大学示例程序,你可以点击此处下载阅读全文
posted @ 2012-04-27 17:09 Serviceboy 阅读(1963) 评论(3) 编辑