EF6 Code First & Auto Migration on Appharbor
2024-08-21 22:34:49
之前不小心看到EF的code first在appharbor上进行migration的时候比较麻烦,今天碰巧也要更新数据库了,顺便试试。
modify model
public class SiteInfo : Entity
{
[JsonProperty("id")]
public string UserId { get; set; }
[JsonProperty("sitename")]
public string SiteName { get; set; }
[JsonProperty("socialid")]
public string SocialId { get; set; }
[JsonProperty("des")]
public string Description { get; set; }
[JsonProperty("token")]
public string AccessToken { get; set; }
[JsonProperty("expires")]
public DateTime ExpireDate { get; set; }
[JsonProperty("refresh")]
public string RefreshToken { get; set; }
[JsonProperty("socialname")]
public string SocilaName { get; set; }
}
其中,RefreshToken和SocilaName是新加的
package manage console
主要执行以下三个命令:
Enable-Migrations
(此时生成了合并的基本架构)Add-Migration
(此时生成了具体变动的代码)Update-Database
(此时对数据库进行了修改,可以添加–Verbose参数观察生成的sql)- 具体介绍和高级技巧见MSDN官方文档,也不对过程中生成的文件作更多介绍了
由于我的项目里有两个dbcontext,所以碰巧碰到了Enable-Migration
需要添加参数的问题,一并把执行过程和出错过程复制出来给大家借鉴一下:
PM> Enable-Migrations
在程序集“SmartSnsPublisher.Web”中找到多个上下文类型。
要允许“SmartSnsPublisher.Web.Models.ApplicationDbContext”的迁移,请使用 Enable-Migrations -ContextTypeName SmartSnsPublisher.Web.Models.ApplicationDbContext。
要允许“SmartSnsPublisher.Web.Models.SiteDbContext”的迁移,请使用 Enable-Migrations -ContextTypeName SmartSnsPublisher.Web.Models.SiteDbContext。 PM> Enable-Migrations -ContextTypeName SmartSnsPublisher.Web.Models.SiteDbContext
正在检查上下文的目标是否为现有数据库...
检测到使用数据库初始值设定项创建的数据库。已搭建与现有数据库对应的迁移“201402141543527_InitialCreate”的基架。若要改用自动迁移,请删除 Migrations 文件夹并重新运行指定了 -EnableAutomaticMigrations 参数的 Enable-Migrations。
已为项目 SmartSnsPublisher.Web 启用 Code First 迁移。 PM> Add-Migration AddSocialNameAndRefreshToken
正在为迁移“AddSocialNameAndRefreshToken”搭建基架。
此迁移文件的设计器代码包含当前 Code First 模型的快照。在下一次搭建迁移基架时,将使用此快照计算对模型的更改。如果对要包含在此迁移中的模型进行其他更改,则您可通过再次运行“Add-Migration AddSocialNameAndRefreshToken”重新搭建基架。 PM> Update-Database
指定“-Verbose”标志以查看应用于目标数据库的 SQL 语句。
正在应用显式迁移: [201402181429554_AddSocialNameAndRefreshToken]。
正在应用显式迁移: 201402181429554_AddSocialNameAndRefreshToken。
正在运行 Seed 方法。
到此为止,检查数据库,新加的两列已经建好了。
这个时候提交代码,appharbor顺利编译通过,访问网站时如愿出现了这个错误:
The model backing the 'SiteDbContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).
也就是说,自动迁移并没有执行,我们需要手动编写代码,找到你的dbcontext类,添加overide如下方法:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<SiteDbContext, Migrations.Configuration>());
base.OnModelCreating(modelBuilder);
}
其中,Configuration类就是Enable-Migration的时候生成的,请自行找到正确的命名空间。再次提交代码,发现数据库已经成功更改了。
所以,至少在EF6,在appharbor上执行migration已经是非常方便的事了。由于有migration history,所以合并后的代码也没有必要去删除了。
最新文章
- Linux httpd源码编译安装
- Python基础2
- tomcate端口设定和服务器虚拟目录设定
- js 字符串格式化方法
- js-JavaScript高级程序设计学习笔记16
- breadth-first depth-first best-first
- MSSQL生成整个数据库的SQL脚本的工具 scptxfr.exe
- IOS 文件管理 2
- 2014第8周三杂记及web标准学习
- cocos2d-x开关按钮类CCControlSwitch
- React.js终探(七)(完)
- mongodb启动
- bzoj3932
- Python 简单聊天室
- CMDB服务器管理系统【s5day89】:采集资产之整合资产
- 20165232第4次实验《Android程序设计》实验报告
- prufer编码
- opencv学习之路(21)、模板匹配及应用
- python scrapy爬虫框架概念介绍(个人理解总结为一张图)
- DNS缓存中毒的知识
热门文章
- 4. EM算法-高斯混合模型GMM详细代码实现
- java基础篇---网络编程(IP与URL)
- js如何获取到本周的第一天和最后一天,本月的第一天和最后一天以及本季度的第一天和最后一天
- 【进阶修炼】&mdash;&mdash;改善C#程序质量(2)
- 在Ubuntu 14.04 64bit上安装Markdown和绘图软件Haroopad
- 【C】——extern
- ECS Linux服务器xfs磁盘扩容
- 《快学 Go 语言》第 16 课 —— 包管理 GOPATH 和 Vendor
- kindle书摘-围城-相爱勿相伤
- CentOS执行ping命令报错 name or service not know