ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2019-06-08 11:01:07  阅读:225  来源: 互联网

标签:c entity-framework ef-code-first ef-migrations sql-server-ce


我创建了一个桌面应用程序,它使用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-framework,ef-code-first,ef-migrations,sql-server-ce
来源: https://codeday.me/bug/20190608/1197486.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有