ASP.NET MVC系列:为已有模型添加新的属性

  在模型类Movie中添加一个新的属性Rating

  重新编译重新生成解决方案,快捷键Ctrl+Shift+B;然后对去对应的视图添加新的数据,如Index.cshtml

  编辑完成,运行之后系统报了一个异常:“System.InvalidOperationException”类型的异常在 EntityFramework.dll 中发生,但未在用户代码中进行处理

  造成这个异常的原因是Movie类中比数据库中多出了一个Rating列,所以我们需要去数据库中添加上Rating字段,你只需要打开数据库文件编辑就行;

  现在我们来介绍另外一种方法:使用 Code First 迁移更新数据库

  首先,我们需要将App_Data文件夹下的数据库文件(Movies.mdf)删除,然后打开“程序包管理器控制台”(你可以在“工具”菜单下的“NUGet程序包管理器”中找到它),并在控制台中输入 Enable-Migrations -ContextTypeName MvcMovie.Models.MovieDBContext

  继续输入命令 add-migration Initial

  成功后你会看到解决方案中多了一个Migrations文件夹和Configuration.cs文件,在Configuration类有个Seed方法,在迁移到最新版本之后,将会调用此方法。所以我们需要添加一些初始化的值,否则在执行update-database的时候会失败,就像下图中的那样

  在Seed中为数据库表创建一个初始对象

        protected override void Seed(MvcMovie.Models.MovieDBContext context)
        {
            context.Movies.AddOrUpdate(i => i.Title,
              new Movie
              {
                  Title = "When Harry Met Sally",
                  ReleaseDate = DateTime.Parse("1989-1-11"),
                  Genre = "Romantic Comedy",
                  Price = 7.99M
              });
        }

  现在再执行update-database就可以成功了,你会看到控制台提说说运行了Seed方法,并且数据库文件也创建好了

  在这里你会好奇为啥没看到Rating字段,因为再删除数据库之前的时候我把要增加的属性Rating注释了,如果不注释掉,Rating会被自动添加上的,也就没有我们新增字段这一说了,或者说添加另外一个新的字段Note、Screenwriters...;如果你在执行上面的过程中没有注释掉Rating,为了完成添加新的属性这个任务,你就再创建一个新的属性,而我这里还是用的Rating

 现在我们为数据库添加新的列 add-migration Rating,执行完后还需要执行 update-database

  查看数据库表结构,我们看到了新增的Rating列

  我们添加新的属性可以不用再删除数据库而直接添加了,只需要在控制台执行 add-migration 属性名 和 update-database 指令就行;现在你可以直接运行项目了,它不再会报错。

  如果在执行 update-database 过程中一直遇到错误,你可以将Migrations文件夹删除了之后重新开始做上面的操作

  http://www.asp.net/mvc/overview/older-versions/getting-started-with-aspnet-mvc4/adding-a-new-field-to-the-movie-model-and-table

 

posted @ 2016-03-25 07:46  高效养猪倌  阅读(1571)  评论(12编辑  收藏  举报