【问题标题】:Change model after database is created on EF4 code only仅在 EF4 代码上创建数据库后更改模型
【发布时间】:2010-11-01 21:48:37
【问题描述】:

嘿,对不起我的英语不好... 仅使用 EF4 代码,我创建了一些 POCO 类,并从中生成了我的数据库。一切正常,我在表上插入了一些数据,但现在我需要在我的一个类上创建一个新属性。如果我只是创建它,应用程序会给我一个例外: {"自从创建数据库以来,支持'TestContext'上下文的模型已更改。手动删除/更新数据库,或使用 IDatabaseInitializer 实例调用 Database.SetInitializer。例如,RecreateDatabaseIfModelChanges 策略将自动删除并重新创建数据库,并可选择使用新数据为其播种。"}

我试图在表上手动创建字段,但它仍然在抱怨...有人知道是否有办法,如果有的话如何我可以手动更新数据库架构(我不想重新创建它,因为我已经有数据)来匹配模型?

【问题讨论】:

    标签: entity-framework-4 code-first ef4-code-only


    【解决方案1】:

    如果您确保新列与您的新属性完全匹配,它应该可以工作。

    例如,如果你添加一个属性 NewProp

    public class MyEntity
    {
        [Key]
        public int Id;
    
        public string PropA;
        public int PropB;
    
        public int NewProp;
    
    }
    

    然后在您的数据库表 MyEntities 中,您将添加一个类型为 int not null 的 NewProp 列。

    您可以做的检查您添加的列是否正确,是重命名您的数据库,然后让 Code-First 重新创建数据库,看看原始数据库和新数据库之间有什么不同。

    【讨论】:

    • 感谢 Christian,我已经尝试过这样做,但问题仍然存在,因为我在 Database.SetInitializer 上使用了 CreateDatabaseOnlyIfNotExists 而不是 null :/ - 那是缺少的链接。但你的回答暗示我看错了地方:)
    【解决方案2】:

    EF 生成部分类。所以你可以在另一个部分类中添加新的属性(字段)。

    【讨论】:

    • Tom,也许我没有正确表达自己...我在更改课程时没有问题,而且我使用的是纯代码(没有 edmx,请参阅 blogs.msdn.com/b/efdesign/archive/2009/06/10/code-only.aspx)。我想知道的是如何手动更新数据库以匹配我的 POCO 类,因为在生成数据库后,类的每次更改都会给我上述异常:/
    猜你喜欢
    • 1970-01-01
    • 2018-02-26
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 2015-01-19
    相关资源
    最近更新 更多