仅在 EF4 代码上创建数据库后更改模型
Posted
技术标签:
【中文标题】仅在 EF4 代码上创建数据库后更改模型【英文标题】:Change model after database is created on EF4 code only 【发布时间】:2010-11-01 21:48:37 【问题描述】:嘿,对不起我的英语不好... 仅使用 EF4 代码,我创建了一些 POCO 类,并从中生成了我的数据库。一切正常,我在表上插入了一些数据,但现在我需要在我的一个类上创建一个新属性。如果我只是创建它,应用程序会给我一个例外: "自从创建数据库以来,支持'TestContext'上下文的模型已更改。手动删除/更新数据库,或使用 IDatabaseInitializer 实例调用 Database.SetInitializer。例如,RecreateDatabaseIfModelChanges 策略将自动删除并重新创建数据库,并可选择使用新数据为其播种。"
我试图在表上手动创建字段,但它仍然在抱怨...有人知道是否有办法,如果有的话如何我可以手动更新数据库架构(我不想重新创建它,因为我已经有数据)来匹配模型?
【问题讨论】:
【参考方案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 类,因为在生成数据库后,类的每次更改都会给我上述异常:/以上是关于仅在 EF4 代码上创建数据库后更改模型的主要内容,如果未能解决你的问题,请参考以下文章
支持“ApplicationDbContext”上下文的模型已在数据库创建后发生更改
关于 “支持“XXXDBContext”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库” 的解决办法