发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
五、使用Code First数据库迁移
当Entity Framework Code First的数据模型发生异动时,默认会引发一个System.InvalidOpertaionException异常。一种解决方法是在Global.asax文档里的Application_Sart方法上,加上一段System.Data.Entity.Database.SetInitializer()方法,让EF自动将数据库删除,然后重新创建模型。不过,这种将数据库砍掉重建的方式实在过于残暴,应该使用更人性化的方式,让EF帮助我们自动调整数据库架构,并且仍然保留现有数据库中的数据。而这种开发技术就是Code First数据库迁移(DB Migration)。
Code First数据库迁移技术,在EF4.3.1版本之后才支持。
System.Data.Entity.Database.SetInitializer( new System.Data.Entity.DropCreateDatabaseIfModelChanges<MvcGuestbook.Models.MvcGuestbookContext>());
1. EF Code First如何记录版本2. 启用数据库迁移
若要在项目中启用数据库迁移功能,必须先开启程序包管理器控制台(Package Manager Console)窗格,然后输入Enable-Migrations指令。
按下Enter键后,Packae Manager Console会自动扫描这个项目中所有的数据上下文类。如果一个项目中有一个以上的数据类别,就会出现错误,必须选用其中一个来启用数据库迁移功能。
PM> Enable-Migrations -ContextTyeName MvcGuestbook.Models.MvcGuestbookContext
运行Enable-Migrations指令的过程中,VS2012会帮助我们在指定的项目里创建一个Migrations目录,该目录下还创建有两个重要的文档,一个是*_InitialCreate.cs文档,另一个是Configuration.cs文档。(1)*_InitialCreate.cs
(2)Configuration.cs
3.运行数据库迁移
我们通过Package Manager Console输入Add-Migration指令,来新增一条数据库迁移版本,输入时必须带上一个“版本名称”参数。例如,要想取名为AddUsernamePassword,则可以输入以下指令:
PM> Add-Migration AddUsernamePassword
运行Add-Migration指令,所代表的意思就是新增一次运行数据库迁移命令,VS2012会自动对比当前数据库中的Model定义与当前更改过的数据模型,并将差异的字段变化写入这个自动新增的类别内。每一次新增数据库迁移版本,其类别内都会包含一个Up()方法与Down()方法,所代表的意思分别是“升级数据库”与“降级数据库”的动作,所以数据库迁移不仅仅是将数据库升级,还可以恢复到旧版本。
接着我们正式对数据库进行迁移动作。
PM> Update-Database
4.自定义数据库迁移规则
5.自动数据库迁移
6.如何避免数据库被自动创建或自动迁移
六、使用ViewModel数据视图模型
在此所自定义的数据模型并不是要决定数据“如何呈现”,而是决定“有哪些数据要呈现”在View上。所以,在View中应该决定的是数据呈现的方式,如HTML、Silverlight等,而在Model中所定义的却是“有哪些字段应该显示在界面上”,这算是商业逻辑的一部分。
在Model层定义的数据模型会运用在整个项目里,无论是由Controller进行信息操作(CRUD),还是在View里面参考Modl层定义的数据模型都会用到。不过,毕竟Model层创建数据模型时,主要是以数据为中心来定义,并不一定适用所有View层的要求。
以会员信息为例,同一个Member数据模型,在会员注册时输入的字段可能是Username、Password、Name、Email,等等,而且每个字段都设置为必填。而同样用到Member数据名,在开发会员登录窗体时,却只要输入Username与Password即可,在登录页面是不用输入Name与Email字段的,因此,若你在会员登录窗体使用Member数据模型进行参考时,就会导致进行数据模型绑定(Model Binding)时发生字段验证失败的问题,此时就需要使用额外定义的ViewModel当作会员登录窗体的数据模型。
这类专门提供给View使用的数据模型,通常称为数据视图模型(ViewModel)。
七、扩充数据模型
1.定义数据模型的Metadata
2.自定义Metadata验证属性
3.ASP.NET MVC 3新增的验证属性
在System.Web.Mvc命名空间下。
(1)Compare,用来比对数据模型中另一个字段是否与套用的字段一致。此属性可用在需要输入两次密码的窗体上,也就是在会员注册页面时,可能会需要输入两次相同的面,避免使用者的输入错误。
(2)Remote,将该字段输入值通过Ajax送到指定的Action做验证,通过远程验证后回传的结果,当作验证的成功与否。此属性可用在验证用户输入的会员账号是否已被使用,通过远程Ajax调用可提升窗体输入的使用性(Usability)。
4.Entity Framework 4 新增的验证属性
在System.ComponentModel.DataAnnotations命名空间下,不过却要添加EntityFramework.dll组件参考才会有。
(1)MinLength,用来验证该资源输入数据的最少字数。此属性可用在密码输入字段,限制使用者至少输入几位数以上的密码,或是输入用户账号时至少输入多少字数以上。
(2)MaxLength,用来验证该字段输入信息的最多字数,此属性与StringLength属性的用法完全相同。
5. .NET4.5新增的验证属性
MembershipPasswordAttribute,验证密码字段是否符合成员资格提供者当前的密码需求。此属性可用在密码输入字段,通过Membership提供者所定义的密码复杂度要求进行检查。在System.Web.Security命名空间中。
来自: 昵称10504424 > 《工作》
0条评论
发表
请遵守用户 评论公约
Access教程 第一章 Access数据库基础
数据的标准结构如下:位 —> 字节 —> 域 —> 记录 —> 文件, 按这种模式说,文件组合成数据库是非常诱人的,但却无法深入...
Aaa.数据库基础知识(选拔性考试)1
3字段属性:即表的组织形式,包括表中字段的个数,每个字段的名称、数据类型、字段大小、格式、输入掩码、有效性规则。字段大小属性用于...
PowerDesigner 导入SQL
将“概念数据模型”的相关设计转换为“物理数据模型”(Physical Data Model),相当于从“概要设计”转换为“详细设 计”,即对表和关系...
erstudio [网经]
版本控制,ER Studio在权限/版本管理方面可以支持并发,checkout/checkin 逻辑和物理设计支持 XML架构,无论从逻辑或物理模型 自动化...
1.模型介绍
1.模型介绍模型介绍。model.pk model.schema 模型实例化 链式调用。模型就是为了方便操作数据库进行的封装,一个模型对应数据库中的一个数据表。注:模型文件不是必须存在,如果没有自定义方法可以不...
窗体常用属性及其含义
窗体常用属性及其含义。指定用户是否可在使用窗体时编辑、删除、添加记录。对于绑定到字段(基于一对多关系的表)的控件,若未启用表间的级联更新,则不能编辑位于关系中的“一”方的联接字段中的数据...
如何使用ComponentOneDataSource控件表格来新建工程
如何使用ComponentOneDataSource控件。按如下步骤新建实体数据模型。下面我们还需要进行一些操作让该模型与C1DataSource可以。现在直接重构应用就将获得一个适合C1DataSource控件的实体。数据模型。工...
Java和.Net三层架构和MVC
Java和.Net三层架构和MVC。而使用Hibernate这个ORM框架,建好实体类后可反向创建数据库表,更精彩的是Java里可以使用注解来标识实体类或...
韩顺平j2ee学习笔记与心得
Java servlets(servlets提供的功能大部分与JSP相同,JSP中大部分是HTML代码,其中只有少量的Java代码,而servlets则相反,它完全使用Java编写,并且产生HTML代码。)。<servlet-name>hello</...
微信扫码,在手机上查看选中内容