分享

MVC-05 Model(2)

 昵称10504424 2013-12-17

五、使用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版本之后才支持。

1. EF Code First如何记录版本
2. 启用数据库迁移

若要在项目中启用数据库迁移功能,必须先开启程序包管理器控制台(Package Manager Console)窗格,然后输入Enable-Migrations指令。

按下Enter键后,Packae Manager Console会自动扫描这个项目中所有的数据上下文类。如果一个项目中有一个以上的数据类别,就会出现错误,必须选用其中一个来启用数据库迁移功能。

运行Enable-Migrations指令的过程中,VS2012会帮助我们在指定的项目里创建一个Migrations目录,该目录下还创建有两个重要的文档,一个是*_InitialCreate.cs文档,另一个是Configuration.cs文档。
(1)*_InitialCreate.cs

(2)Configuration.cs

3.运行数据库迁移

我们通过Package Manager Console输入Add-Migration指令,来新增一条数据库迁移版本,输入时必须带上一个“版本名称”参数。例如,要想取名为AddUsernamePassword,则可以输入以下指令:

运行Add-Migration指令,所代表的意思就是新增一次运行数据库迁移命令,VS2012会自动对比当前数据库中的Model定义与当前更改过的数据模型,并将差异的字段变化写入这个自动新增的类别内。
每一次新增数据库迁移版本,其类别内都会包含一个Up()方法与Down()方法,所代表的意思分别是“升级数据库”与“降级数据库”的动作,所以数据库迁移不仅仅是将数据库升级,还可以恢复到旧版本。

接着我们正式对数据库进行迁移动作。

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命名空间中。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多