MVC 捋一遍(3)
Seed方法接收一个database context参数,利用这个参数添加新的实体到数据库中。
对每个实体类型:
新建一个实体集合
添加到相应的DbSet属性
保存更改到数据库中
执行 add-migration时,同样在Migrations文件夹里面,产生一个<timestamp>_InitialCreate.cs的文件。
里面两个方法,Up和Down: Up方法创建数据库表,Down方法删除表。
enable-migrations 和 add-migration InitialCreate
在项目根目录下创建了一个Migrations文件夹
在Migrations文件夹下新建一个Configuration.cs文件。
可以通过修改Configuration.cs来对Migration做一些配置(如加入一些测试数据等)
使用Code First Migrations方式,当数据库改变时测试数据会保留,所以Seed方法一般来说是不需要的。
在一个表中添加属性 需要用Code First Migrations 方式更新数据库
添加 public DateTime CreateDate { get; set; }
增加完之后及时使用Code First Migrations 方式更新数据库。(不然运行时会报contex和database不一致的错误)
执行add-migration AddTestTable和update-database, 完成数据库表的添加。表名为(Test)
add-migration AddCreateDateToSysUser,update-database,完成数据库表中元素的添加。元素名为(CreateDate)
所以最重要的是:启用迁移(enable-migrations) 和 执行迁移(add-migration 。。, update-database)
启用迁移:产生迁移相关文件夹Migrations和文件夹中相关的配置文件。
执行迁移:产生相关的迁移更改文件并执行更改。
限制显示具体时间格式
DataType 属性用来指定更加具体的数据类型,DataType枚举值提供了一些常见的类型,比如Date,Time,EmailAddress等。
但是DataType不能指定数据类型的显示格式,例如日期要什么格式显示。
默认情况下显示格式会根据电脑的设定显示。
这个时候就需要配合使用DisplayFormate属性来指定格式。
[DisplayFormat(DataFormatString="{0:yyyy-MM-dd}",ApplyFormatInEditMode=true)]
StringLength 指定数据验证规则以及出错信息
StringLength属性设置了数据库中存储字段的最大长度,为程序提供客户端和服务器端的验证。同样用这个属性也可以指定最小长度,不过不影响数据库的结构。
同样更新下数据库 (不然会出错)
add-migration MaxLengthOnNames
update-database
然后还要在controller中加一个判断不然还是会报错 if(ModelState.IsValid)
还要在Create.cshtml中增加一个Helper:ValidationMessageFor用来显示验证信息
Column (我感觉用的很少)
有时会有这么一种情况,我们Model中的字段和数据库中表的字段要用不同的命名。例如我们Model中命名为UserName,数据库表中命名为LoginName.
同样运行更新指令。
add-migration ColumnLoginName
update-database
对某一些类型来说不需要使用Required, 例如DateTime, int,double,float,Display因为这些值类型不能被赋予空值,因此他们天生就具有Required的特性。
直接update-database 就可以看到效果了
Lazy, Eager, and Explicit Loading of Related Data (不懂什么意思)
有三种方式EF可以加载关联数据到一个实体的navigation属性中
MVC Html.AntiForgeryToken() 防止CSRF攻击
http://blog.csdn.net/cpytiger/article/details/8781457这个比较有意思
Model验证总结 @Html.ValidationSummary(true) http://blog.csdn.net/wybshyy/article/details/52064253 里面有常用的正则表达式验证