之前不小心看到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,所以合并后的代码也没有必要去删除了。

EF6 Code First & Auto Migration on Appharbor的更多相关文章

  1. SQLITE WITH ENTITY FRAMEWORK CODE FIRST AND MIGRATION

    Last month I’ve a chance to develop an app using Sqlite and Entity Framework Code First. Before I st ...

  2. MVC5中EF6 Code First启动慢及间隙变慢优化的实践经验(转)

    最近项目在使用EF了,mvc使用EF确实方便,因为添加功能的时候可以使用vs自动生成用ef的增.删.查.改的模板,大的提高的工作效率.但是很多人都遇到过用EF开发的程序在第一次访问的时候会比用ADO纯 ...

  3. 用 MVC 5 的 EF6 Code First 入门 系列:MVC程序中实体框架的Code First迁移和部署

    用 MVC 5 的 EF6 Code First 入门 系列:MVC程序中实体框架的Code First迁移和部署 这是微软官方SignalR 2.0教程Getting Started with En ...

  4. [转] 使用 MVC 5 的 EF6 Code First 入门 系列

    译文:http://www.cnblogs.com/Bce-/category/573301.html 原文:http://www.asp.net/mvc/overview/getting-start ...

  5. 【亲测】Asp.net Mvc5 + EF6 code first 方式连接MySQL总结

    本文原文地址为:https://www.cnblogs.com/summit7ca/p/5423637.html 原文测试环境为windows 8.1+Vs2013+MySql5.7.12 本人在wi ...

  6. MVC5使用EF6 Code First--创建EF数据模型(一)

    此Web应用程序演示如何使用Entity Framework 6和Visual Studio 2015创建ASP.NET MVC 5应用程序.本教程使用“Code First ”即代码先行.有关如何在 ...

  7. Linux学习日记-使用EF6 Code First(四)

    一.在linux上使用EF 开发环境 VS2013+mono 3.10.0 +EF 6.1.0 先检测一下EF是不是6的 如果不是  请参阅 Linux学习日记-EF6的安装升级(三) 由于我的数据库 ...

  8. Asp.net Mvc 使用EF6 code first 方式连接MySQL总结

    最近由于服务器变更为Linux系统.MsSql for Linux什么时候出来到生产环境使用还是要很长时间的.于是考虑使用Mysql数据库,ORM使用EF.于是先踩下坑顺便记录一下,有需要的tx可以参 ...

  9. MVC5与EF6 Code First 第一个入门完整实例教程

    mvc如今火的不行,我今天就来介绍一个MVC5与EF6开发的实际的入门实例,因为EF6默认是Code First的,所以我今天也就用EF6 的Code First来做一个简单的实例,为了让实例显得简单 ...

随机推荐

  1. sql分割字符串

    DECLARE @str NVARCHAR(MAX); SET @str = 'aa|bb|cc|dd'; ) SET @str += '|' BEGIN SET @n = LEFT(@str, CH ...

  2. python获取软件安装列表2222

    softer_installed_list ===================== 使用python编写的,获取本机软件安装列表,输出为html表格. * win7 32位环境下运行 * 使用的是 ...

  3. 【WPF】使用控件MediaElement播放视频

    需求是点击按钮后,弹出弹窗播放视频.按钮的点击事件如下. public void ShowVideo() { Window window = new Window(); window.Width = ...

  4. 树莓派3B+首次登陆通过网络

    树莓派3B+默认串口不能登录,即使可使用可需要通过连线方式连接,如何才能直接通过网络ssh登录树莓派呢? 串口问题及使用 树莓派3的UART串口的使用问题,该串口问题的官方反馈及回复请参考这两篇官方博 ...

  5. linux命令实现http的get和post请求

    1. wget wget -O -  "http://$IP/host" --header="Content-Type: application/json" - ...

  6. android开发(34) 自定义 listView的分割线( 使用xml drawable画多条线)

    我遇到这样一个场景,我需要自定义 listView的分割线,而这个分割线是由两条线组成的,在使用xml drawable时遇到了困难. 注释:画两条线是为了实现 凹陷的效果,在绘图中一条暗线紧跟着一条 ...

  7. mybatis中的#{}和${}区别

    mybatis中的#{}和${}区别 2017年05月19日 13:59:24 阅读数:16165 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #use ...

  8. [hadoop读书笔记] 第十五章 sqoop1.4.6小实验 - 数据在mysq和hdfs之间的相互转换

    P573 从mysql导入数据到hdfs 第一步:在mysql中创建待导入的数据 1.创建数据库并允许所有用户访问该数据库 mysql -h 192.168.200.250 -u root -p CR ...

  9. Q_UNUSED() 方法的使用

    Q_UNUSED() 没有实质性的作用,用来避免编译器警告 //比如说 int testFunc(int a, int b, int c, int d) { int e; return a+b+c; ...

  10. [转]java加密算法简要介绍

    本篇内容简要介绍BASE64.MD5.SHA.HMAC几种加密算法.     BASE64编码算法不算是真正的加密算法.     MD5.SHA.HMAC这三种加密算法,可谓是非可逆加密,就是不可解密 ...