ASP.NET MVC 学习6、学习使用Code First Migrations功能,把Model的更新同步到DB中
2024-08-24 14:33:15
参考:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-new-field-to-the-movie-model-and-table
本文内容:
1,学习Entity Framework Code First 迁移功能(Migrations)
2,更新Model Class(Model Class中添加新的字段),然后把更新应用于datebase.
默认情况下,就像我们之前用Models下的movie.cs右键点击直接添加database的时候,Code First自动在数据库中添加新的表来记录新添加的database时候和movie.cs同步,如果不同步,Entity Framework就会跑出错误。这样我们就可以在开发的过程中发现错误,而不是必须在运行的时候才发现错误。
, scale: ),
})
.PrimaryKey(t => t.ID);
}
public override void Down()
{
DropTable("dbo.Movies");
}
}
现在我们运行命令PM>update-datebase 来创建数据库,运行Seed方法:
如果运行update-database方法的时提示Table已经存在,是因为你在删除表之后运行了项目。如果是这样再次把Movie.mdf删除,然后执行update-datebase命令。如果还是报错,删除Migrations文件夹,然后从上面删除Movie.mdf处重新按照本文介绍的一步一步来。
Ctrl+F5执行程式,我们看到了Seed方法中的数据:
二,在Movie Model中添加新的属性字段,把字段同步到DB的Table中
namespace MVCMovie.Models
{
//Moive 类就相当于数据库中的一张名为Movie的Table
//Movie 类实例化的对象相当于Table中的一行,实例的各个属性(ID,Title...)相当于Table中的列
public class Movie
{
public int ID { get; set; }
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
public decimal Price { get; set; }
public string Rating { get; set; }
}
//MovieDBContext class ,继承自Entity Framework中的DbContext,代表这Movie数据上下文
//MovieDBContext class ,读取、存储、更新Movie Class 实例
public class MovieDBContext : DbContext
{
public DbSet<Movie> Movies { get; set; }
}
}
Ctrl+Shift+B重建解决方案,然后在View中的各个页面添加Rating属性:
<div class="editor-label">
@Html.LabelFor(model => model.Rating)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Rating)
@Html.ValidationMessageFor(model => model.Rating)
</div>
Ctrl+F5运行程序,提示如下:
这是因为我们刚刚在Model中的Movie.cs中添加了新的属性字段,Movie.cs中的字段和已经存在的Database中的表字段不一致:
我们用Code First Migrations来解决这个问题:
1,在Seed中的每一个对象实例中添加 Rating= "G",如:
context.Movies.AddOrUpdate(i => i.Title,
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-1-11"),
Genre = "Romantic Comedy",
Rating = "G",
Price = 7.99M
},
2,
执行以下命令PM>add-migration AddRatingMig
这个命令告诉migration framework 检查当前的movie model是否和dabatase 中的Movie 字段一致,如果不一致,就会添加必要的code来更新DB和新的Model一致:
3,解决方案下面新建了带有时间戳的_AddRatingMig.cs文件,文件中有添加和删除新的列,保证Model和DB
中的字段一致
namespace MVCMovie.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class AddRatingMig : DbMigration
{
public override void Up()
{
AddColumn("dbo.Movies", "Rating", c => c.String());
}
public override void Down()
{
DropColumn("dbo.Movies", "Rating");
}
}
}
4,执行命令PM>update-database
5,刷新”MovieDBContext”后我们看到在Movie.cs中添加的属性同步到了DB的Table中:
Migrations Configuration.cs中的Sample数据也填充到了Database中:
6,Ctrl+Shift+B,Ctrl+F5运行,我们看到所有的页面中都有了Rating:
这一节,我们可以在Model中添加新的属性,并且同步到DB中。我们也学习了,把Sample数据填充到DB的Table中。下一节,我们将会在Model Class中对新增数据添加逻辑验证(validation logic)和业务规则(business rules).
See You。。。
最新文章
- 通过参数传递,判断数字、字符串、list、tuple、词典等数据类型是否为可变数据对象
- ubuntu14.04 boost动态库找不到 libboost_system.so.1.58.0
- Android接收系统广播
- innobackupex的安装
- HealthKit开发教程之HealthKit的主要类型数据
- 应用层HTTP,FTP,TFTP,TELNET,DNS,EMAIL
- 【BZOJ 2038】[2009国家集训队]小Z的袜子(hose)
- CAFFE中训练与使用阶段网络设计的不同
- table表格中单击添加动态编辑框
- 关于PHP 开启zlib gzip配置
- poj1236/luogu2746 Network of Schools (tarjan)
- JavaScript 第九章总结
- trycatche
- 产环境部署node记录(三): centOS 7 mySQL和mongoDB的安装
- idea中使用插件lombok简化java bean的getter/setter/log等常用功能
- django 给前端传递HTML内容
- Java高级架构师(一)第35节:Nginx的Location区段
- laravel 中条件查询 function模式
- struts2学习笔记(一)—— struts2介绍及入门程序
- 【原创】学习CGLIB动态代理中遇到的问题
热门文章
- 【转】 Android经验: proguard 阻碍 webview 正常工作
- 在云服务器搭建WordPress博客(二)使用xampp并解决端口冲突问题
- shell date
- 【WCF--初入江湖】10 序列化和传输大型数据流
- linux服务器重启服务命令说明文档
- Code::Blocks生成的EXE文件执行错误解决:The program can&#39;t start because libgcc_s_dw2-1.dll is missing
- 李洪强iOS之Foundation框架—字符串
- windows下安装ubantu
- 【Linux高频命令专题(14)】nl
- [转]c#调用API截图