1.选择MVC3 Web应用程序项目

 

2.选择空模板,视图引擎我们选择Razor

 

 3.项目新建后,我们能看到默认的JS都不是最新的,所以我们使用NuGet来更新项目内相关组件包

 

 4.在项目上右键,选择管理Nuget程序包

 

5.Nuget会列出项目中所有可更新的组件,我们需要更新JqueryJquery UI和Entity Framework到最新版本,点击安装即可

 

6.更新后我们可以看到相关文件已经全部到最新版本

 

 

7.环境已经搭好,现在创建一个简单的系统,数据库有一张用户表Tbl_User,用户可以登录,修改等操作,系统使用EF的新特性——数据库迁移,我们不直接操作任何数据表的创建,全部通过EF自动生成

 

创建Tbl_User表的对应model,我们命名为Tbl_User(在自动创建的时候,类名就是数据库表名)

我们在项目文件夹Models中创建了以下Tbl_UserModel 

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会自动帮我们生成MvcDemoContextUserControllerUserController对应的视图文件夹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/userMVC默认主页是http://localhost:3556/Home,默认访问index页面,我们没有这个目录,所以我们运行http://localhost:3556/user,会访问到index页面

 

 

  • 接着,创建一个新的用户,发现当初Tbl_Usermodel写错了,年龄的字段长度设为了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进行数据库更新,重新运行成功