最终编辑: 嗯,很高兴知道微软的好人(排除营销高管)是天才,即使我不是。请记住,孩子:如果要更改数据模型,请使用getter / setter定义属性,而不是公共字段。 Duh ... 8-D
编辑4: 我很高兴我没有浪费任何人的时间,因为我认为我已经解决了这个问题(尽管我还没有完全确定这是否真的存在)。
以下是这笔交易:我将我所谓的新物业定义为一条简单的绳索,没有GET / SET!如果你愿意,可以叫我坏名字。我的模型没有缓存版本,但无论如何都指向我的手指很有趣。傻我。我的自我肯定喜欢抱怨。
在我完全确认一切正常后,我会回来并发布最后一篇文章。
原帖: 我正在使用实体框架并将我的项目结构化,以便我的数据上下文在一个项目中,而我的模型在另一个项目中。曾经有一段时间我能够使用迁移并且它有效,但现在它不起作用。此外,如果我尝试向我的模型添加属性并在我的数据库中手动创建它,则只会忽略新列。不知怎的,我有一个我不需要的迁移,Migrations拒绝让我继续下去,所以我开始从头开始使用我现有的数据库。在此过程中,我将所有项目升级到Entity Framework V6.0。之后,我的应用程序仍然有效,但我不能修改我的数据模型。
我试过这个: http://www.ladislavmrnka.com/2012/03/ef-4-3-migrations-and-existing-database/ 还有这个: How to use migrations on an existing db in production created using Entity Framework 4.1?
我采取的步骤:
从那里,如果我更改我的模型并生成另一个迁移,则Up()和Down()中没有生成的代码。因此,运行Update-Database没有任何用处。
我也尝试了这些步骤,并为每个包含连接字符串的项目指定了StartUpProjectName,但这也没有帮助。
我尝试删除数据库并允许它重新生成(这不是我想要的)。即使在这种情况下,新的迁移也没有做任何事情。
帮助?
编辑: 我现在将我的模型移动到与DbContext相同的程序集中。但是,删除我的Migrations文件夹并截断_MigrationHistory表后的情况相同:
启用 - 迁移 - 项目名称MyProjectWithDataContextAndModel -StartUpProjectName MyProjectWithConnectionString
Add-Migration Initial -IgnoreChanges -ProjectName MyProjectWithDataContextAndModel -StartUpProjectName MyProjectWithConnectionString
Update-Database -ProjectName MyProjectWithDataContextAndModel -StartUpProjectName MyProjectWithConnectionString(这成功地将一个条目放入_MigrationHistory表中)
将属性添加到我的某个模型类
Add-Migration AddProperty -ProjectName MyProjectWithDataContextAndModel -StartUpProjectName MyProjectWithConnectionString(这再次以空的Up()和Down()代码结果)
当然,这是一个非常非常常见的情况,让迁移中断并需要重新回到马鞍上。
编辑2: 好的,所以我删除了我的数据库并允许Code First通过创建初始迁移然后运行Update-Database来生成新的数据库。然后我向我的一个模型类添加了一个属性,并用[REQUIRED]属性进行了修饰,并重建了我的解决方案。从那里我运行Add-Migration并再次运行一个空的Up()和Down()。
这使我陷入无法开发的情况,最后期限迫在眉睫,无法改变我的数据模型。引用克里斯法利:为了上帝的爱...请帮助! : - )
编辑3: 好吧,我决定看看如果我删除数据库然后让EF使用我的模型中定义的新属性重新生成它会发生什么。换句话说,我将新属性添加到我的模型FIRST中,然后只是因为我导致EF重新生成数据库。
猜猜是什么?新属性不在重新生成的数据库中。我不是Code First大师,但很明显我的代码文件根本没有被EF使用。某处是我的模型的缓存版本,用于重新生成数据库。