3

最终编辑:嗯,很高兴知道微软的好人(营销主管除外)是天才,即使我不是。请记住,孩子们:如果您想更改数据模型,请使用 getter/setter 定义您的属性,而不是作为公共字段。呃... 8-D

编辑 4:我很高兴我没有在这方面浪费太多时间,因为我认为我已经解决了这个问题(尽管我还没有完全检查这是否属实)。

这是交易:我将我所谓的新属性定义为简单的字符串,没有 GET/SET!如果你愿意,可以叫我坏名字。我的模型没有缓存版本,但无论如何指点我的手指很有趣。傻我。我的自我肯定喜欢抱怨。

在我完全验证一切正常后,我会回来并最终关闭这篇文章。

原始帖子:我正在使用实体框架并构建我的项目,以便我的数据上下文在一个项目中,而我的模型在另一个项目中。曾经有一段时间我可以使用 Migrations 并且它有效,但现在它不起作用。此外,如果我尝试将属性添加到我的模型并在我的数据库中手动创建它,则新列将被忽略。不知何故,我有一个我不需要的迁移,而 Migrations 拒绝让我继续前进,所以我开始从头开始使用我现有的数据库。在此过程中,我将所有项目都升级到了 Entity Framework 6.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. 从数据库中删除了我的 _MigrationHistory 表,并从包含数据上下文的项目中删除了 Migrations 文件夹
  2. Enable-Migrations -ProjectName MyProjectWithDataContext (成功,并且 -Force 不是必需的)
  3. Add-Migration Initial -IgnoreChanges -ProjectName MyProjectWithDataContext(成功)
  4. 更新数据库 -ProjectName MyProjectWithDataContext

从那里开始,如果我更改模型并生成另一个迁移,则 Up() 和 Down() 中没有生成的代码。因此,运行 Update-Database 没有任何用处。

我也尝试了这些步骤,并为每个包含连接字符串的项目指定了 StartUpProjectName,但这也无济于事。

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

帮助?

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

  1. Enable-Migrations -ProjectName MyProjectWithDataContextAndModel -StartUpProjectName MyProjectWithConnectionString

  2. 添加迁移初始 -IgnoreChanges -ProjectName MyProjectWithDataContextAndModel -StartUpProjectName MyProjectWithConnectionString

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

  4. 将属性添加到我的模型类之一

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

当然,这是一个非常非常常见的情况,迁移中断并需要重新开始。

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

这使我处于无法进行开发的情况下,截止日期迫在眉睫,无法更改我的数据模型。引用 Chris Farley 的话:为了上帝的爱……请帮忙!:-)

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

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

4

0 回答 0