c# – 我可以迁移到在Entity框架中没有迁移的情况下创建的数据库吗?

我创建了一个桌面应用程序,它使用SQL CE 4.0和Entity框架和Code First模式.所以,最初我在系统上安装了应用程序,它工作正常.现在我为模型类添加了一些属性,因此为此我使用Enable-Migrations启用了迁移,并使用Add-Mig...

我创建了一个桌面应用程序,它使用SQL CE 4.0和Entity框架和Code First模式.所以,最初我在系统上安装了应用程序,它工作正常.

现在我为模型类添加了一些属性,因此为此我使用Enable-Migrations启用了迁移,并使用Add-Migration“MyMigration”添加了新的迁移.这也是成功的,我能够毫无问题地安装新版本和升级数据库.

但是现在当我在没有现有数据库的系统上安装此设置时,它就失败了,所以在研究之后我意识到我需要添加初始迁移所以,我撤消了模型中的更改并删除了我的SQLCE数据库文件,添加了初始迁移,然后更新数据库.因此,如果我尝试使用在没有启用迁移的情况下创建的旧数据库来更新数据库,那么它会失败,它会尝试将初始迁移应用到数据库,而不应该根据我这样做.

现在,如果我删除旧数据库文件,然后删除Update-Database,则会创建新数据库,然后再次将我的更改添加到模型并添加预期的迁移.

因此,在此之后,我可以在空白系统上安装我的应用程序但是在具有旧数据库的系统上失败,即它不会升级数据库.

它也尝试应用初始迁移,即再次创建所有表并且不能说,表已经存在,这是不期望的.

解决方法:

问题是,它检查一个名为Migrations的表,我认为它获取当前squema和更改的信息.如果你在不使用EF的情况下对数据库进行了大量更改,那么无论如何你都会遇到很多clonflicts会发生的事情.

您可以使用fluent migrations自己完成所有操作,并可以更好地控制更改和回滚

例:

 [Migration(201610250659)]
public class _201610250659_AddedMinimumValue_Prices : Migration
{
    public override void Up()
    {
        Alter.Table("Prices")
            .AddColumn("MinimunValue").AsInt32().NotNullable().WithDefaultValue(1);
    }

    public override void Down()
    {
        Delete.Column("MinimunValue")
            .FromTable("Prices");
    }
}

本文标题为:c# – 我可以迁移到在Entity框架中没有迁移的情况下创建的数据库吗?

基础教程推荐