代码优先迁移不起作用

时间:2013-11-13 02:29:14

标签: entity-framework ef-code-first

最终编辑: 嗯,很高兴知道微软的好人(排除营销高管)是天才,即使我不是。请记住,孩子:如果要更改数据模型,请使用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?

我采取的步骤:

  1. 从包含数据上下文的项目中的数据库和Migrations文件夹中删除了我的_MigrationHistory表
  2. 启用 - 迁移 - 项目名称MyProjectWithDataContext(成功,并且不需要-Force)
  3. 添加 - 迁移初始--IgnoreChanges --ProjectName MyProjectWithDataContext(成功)
  4. Update-Database -ProjectName MyProjectWithDataContext
  5. 从那里,如果我更改我的模型并生成另一个迁移,则Up()和Down()中没有生成的代码。因此,运行Update-Database没有任何用处。

    我也尝试了这些步骤,并为每个包含连接字符串的项目指定了StartUpProjectName,但这也没有帮助。

    我尝试删除数据库并允许它重新生成(这不是我想要的)。即使在这种情况下,新的迁移也没有做任何事情。

    帮助?

    编辑: 我现在将我的模型移动到与DbContext相同的程序集中。但是,删除我的Migrations文件夹并截断_MigrationHistory表后的情况相同:

    1. 启用 - 迁移 - 项目名称MyProjectWithDataContextAndModel -StartUpProjectName MyProjectWithConnectionString

    2. Add-Migration Initial -IgnoreChanges -ProjectName MyProjectWithDataContextAndModel -StartUpProjectName MyProjectWithConnectionString

    3. Update-Database -ProjectName MyProjectWithDataContextAndModel -StartUpProjectName MyProjectWithConnectionString(这成功地将一个条目放入_MigrationHistory表中)

    4. 将属性添加到我的某个模型类

    5. Add-Migration AddProperty -ProjectName MyProjectWithDataContextAndModel -StartUpProjectName MyProjectWithConnectionString(这再次以空的Up()和Down()代码结果)

    6. 当然,这是一个非常非常常见的情况,让迁移中断并需要重新回到马鞍上。

      编辑2: 好的,所以我删除了我的数据库并允许Code First通过创建初始迁移然后运行Update-Database来生成新的数据库。然后我向我的一个模型类添加了一个属性,并用[REQUIRED]属性进行了修饰,并重建了我的解决方案。从那里我运行Add-Migration并再次运行一个空的Up()和Down()。

      这使我陷入无法开发的情况,最后期限迫在眉睫,无法改变我的数据模型。引用克里斯法利:为了上帝的爱...请帮助! : - )

      编辑3: 好吧,我决定看看如果我删除数据库然后让EF使用我的模型中定义的新属性重新生成它会发生什么。换句话说,我将新属性添加到我的模型FIRST中,然后只是因为我导致EF重新生成数据库。

      猜猜是什么?新属性不在重新生成的数据库中。我不是Code First大师,但很明显我的代码文件根本没有被EF使用。某处是我的模型的缓存版本,用于重新生成数据库。

0 个答案:

没有答案