EF在没有迁移的情况下添加现有表

时间:2015-08-24 09:14:11

标签: entity-framework ef-code-first ef-migrations

在EF中,如果我添加一个代表数据库中现有表的新实体,我会收到一条错误消息,说明我需要运行迁移。

是否有将现有表添加到我的上下文而无需创建新迁移?

像这样的空迁移似乎毫无意义......

public override void Up()
{
}

public override void Down()
{
}

我猜每次添加entites都会将它与__MigrationHistory模型列中的序列化版本进行比较。

2 个答案:

答案 0 :(得分:1)

您通常有两种选择:

  1. 您可以在数据库中创建表格并以自己的方式使用它。这意味着,您可以使用标准SQL提供程序创建示例Logs表并写入数据。如果您稍后将此表添加到DbContext,则将创建迁移。
  2. 您可以先创建数据库,然后编写代码。这种方法称为逆向工程。您仍然可以通过代码优先方法获得所有优势,但不会创建任何迁移。
  3. 另一种可能的解决方案是有两个DbContexts。在第一种情况下,您可以首先使用代码进行迁移,第二种情况可以是使用逆向工程方式使用的DbContext。

    如果您不希望在架构中发生某些更改时创建迁移,则可以考虑MigrateDatabaseToLatestVersion初始化。

答案 1 :(得分:0)

我们在此方案中所做的是重新使用最新的迁移。您可以使用-force开关并指定目标迁移来重新迁移迁移。首先制作当前迁移的副本,然后在强制之后对其进行比较:您实际上告诉EF可以使用任何待处理的更改覆盖该文件。这是过程:

  1. 将数据库更新为您当前第二次迁移。这将释放最新的更改。
  2. update-database -target:"SecondMostCurrentMigration"

    1. 使用现有文件重新构建最新的迁移
    2. add-migration MostCurrentMigrationName -force

      1. 根据您所做的副本审核该文件,以确保没有任何更改

      2. 将数据库更新为最新的迁移,即您刚刚修改的现有文件'。

      3. update-database