ASP.NET MVC3 Step By Step 学习笔记 (2)——创建简单MVC3应用程序
1.选择MVC3 Web应用程序项目
2.选择空模板,视图引擎我们选择Razor
3.项目新建后,我们能看到默认的JS都不是最新的,所以我们使用NuGet来更新项目内相关组件包
4.在项目上右键,选择管理Nuget程序包
5.Nuget会列出项目中所有可更新的组件,我们需要更新Jquery,Jquery UI和Entity Framework到最新版本,点击安装即可
6.更新后我们可以看到相关文件已经全部到最新版本
7.环境已经搭好,现在创建一个简单的系统,数据库有一张用户表Tbl_User,用户可以登录,修改等操作,系统使用EF的新特性——数据库迁移,我们不直接操作任何数据表的创建,全部通过EF自动生成
创建Tbl_User表的对应model,我们命名为Tbl_User(在自动创建的时候,类名就是数据库表名)
我们在项目文件夹Models中创建了以下Tbl_User的Model
public class Tbl_User { [DisplayName("ID")] [Key] public Guid ID { get; set; } [DisplayName("用户名")] [StringLength(20, ErrorMessage = "用输入用户名")] [Required] public string name { get; set; } [DisplayName("密码")] [StringLength(20, MinimumLength = 6, ErrorMessage = "密码至少输入6位")] [DataType(DataType.Password)] [Required] public string pwd { get; set; } [DisplayName("邮箱")] [DataType(DataType.EmailAddress)] public string email { get; set; } [DisplayName("年龄")] [StringLength(1)] public int age { get; set; } [DisplayName("创建时间")] [Required] public DateTime? datetime_create { get; set; }//使用可空类型,在界面绑定时,在没有值的情况下可让绑定后生成的文本框为空 }
通过给各个属性添加各自的Attribute,来对属性进行约束;在理想状态下,我们的界面甚至不用手动添加属性的描述性文字
在使用Attribute时,需要引入以下命名空间
using System.ComponentModel; using System.ComponentModel.DataAnnotations;
常用Attribute
Required: |
指定为必填字段,即指定数据库对应的列不允许为 null 值 |
StringLength: |
指定字段的长度范围,最小长度 |
NotMapped: |
没有对应关系,即此字段不会在数据库中生成对应的列 |
Key: |
指定对应数据库中为主键字段 |
DisplayName: |
属性显示的名称 |
DataType: |
指定要与数据字段关联的附加类型的名称,有个名字为DataType的枚举,用来指定数据类型,并会对其创建对应的验证规则和生成方式 |
我们通过EF自动生成Tbl_User的相关增删改查操作和对应界面,在项目文件夹上右键,创建名字为UserController的控制器(控制器名称中的后缀Controller不能修改,这是MVC的默认约定),选择模板为包含读写和视图的EF控制器,模型类选择刚才我们创建的Tbl_User(需要编译一次才能显示),数据上下文我们使用自动创建的的MvcDemoContext
完成后,VS会自动帮我们生成MvcDemoContext,UserController和UserController对应的视图文件夹View/User(包括查询,创建,编辑,详细,删除页面)
通过数据库迁移自动生成数据库,在web.config文件中,创建SQL数据库连接,命名为MVCDemoServices
<connectionStrings> <add name="MVCDemoServices" connectionString="Data Source=.;Initial Catalog=MVCDemo;Persist Security Info=True;User ID=sa;Password=123456" providerName="System.Data.SqlClient" /> </connectionStrings>
在MVCDemoContext 上下文的构造函数中,指定数据库连接
public class MVCDemoContext : DbContext { public MVCDemoContext() : base("MVCDemoServices") { } public DbSet<Tbl_User> Tbl_User { get; set; } }
使用PM控制台,进行数据库迁徙
- 输入Enable-Migrations自动生成文件夹Migrations和文件Configuration.cs
- 输入Add-Migration CreateUser,自动在文件夹Migrations下生成版本文件
- 输入Update-Database自动创建或者更新数据库
- 我们进SQL Server Management Studio后发现数据库MVCDemo已经被创建好了
迁移命令: |
Enable-Migrations //启用数据库迁移并创建文件夹 |
|
Add-Migration AddAuthor // AddAuthor 是任意名,是版本标记 |
|
Update-Database //更新数据库 |
|
Update-Database –TargetMigration:"xxx" //即可回溯数据库到指定版本 XXX为指定版本,不带.cs,例如:201206171450182_Deletetest |
|
先生成EF代码才能使用更新数据库 |
现在运行下系统,输入http://localhost:3556/user,MVC默认主页是http://localhost:3556/Home,默认访问index页面,我们没有这个目录,所以我们运行http://localhost:3556/user,会访问到index页面
- 接着,创建一个新的用户,发现当初Tbl_User的model写错了,年龄的字段长度设为了1,我们返回model进行修改,去除年龄字段的字符长度
[DisplayName("年龄")] public int age { get; set; }
- 修改后,重新运行,保存成功
- 在生产的数据库中,我们发现email字段的类型是nvachar(max),实际email不需要这么长,修改为100字符长度即可
[DisplayName("邮箱")]
[DataType(DataType.EmailAddress)]
[StringLength(100)]
public string email { get; set; }
- 编译后重新运行,系统报错
- 原因是我们修改了Model中字段的数据字段长度,但数据库中并没有进行修改,所以我们需要使用EF的数据库迁徙,进行数据库更新
- 打开PM控制台,输入Add-Migration UpdateTbl_User,生成更新文件
- 再输入Update-Database进行数据库更新,重新运行成功
转载于:https://www.cnblogs.com/godson321/archive/2012/07/04/2575464.html