【问题标题】:How to ignore a table/class in EF 4.3 migrations如何在 EF 4.3 迁移中忽略表/类
【发布时间】:2012-01-26 10:25:44
【问题描述】:

我正在使用 EF 4.3(测试版)进行测试

我有一些应该生成数据库表和列的新类。

从一个旧项目中,我的架构中有一些旧表,我想通过 EF 访问它们。 所有类都被声明。为了访问旧表,有一个被映射的 poco。

数据库迁移也尝试创建那个旧表。

如何设置这个类/表不是迁移的一部分,而是ef模型的一部分?

xxx.OnModelCreating()    
{
    modelBuilder.Ignore<myOldTableClass>();    
}

从模型中删除整个类。最后我不能用它来通过 dbContext 访问。

我喜欢使用自动迁移。 我尽量避免将旧的数据库表完全迁移到 EF 类。 (是的,我知道有生成器) 有 120 个表,仍然由旧应用程序使用。

一些仅与 EF(新应用程序)一起使用的新表。 有3个常用的表。 那些不应该创建,而是通过 ef 访问。

【问题讨论】:

    标签: c# entity-framework entity-framework-4 entity-framework-migrations


    【解决方案1】:

    随着EF 4.3.1 的发布,内置了对这种情况的支持。添加映射到数据库中现有表的类时,请使用 -IgnoreChanges 切换到 Add-Migration

    这将生成一个空迁移,其中包含更新的元数据签名,其中包含新添加的类。

    这通常在开始使用 EF 迁移时完成,因此有“InitialMigration”名称:

    Add-Migration InitialMigration –IgnoreChanges
    

    【讨论】:

    • 我从这个答案中不明白如何指定要忽略的类名。
    • 当我们只想忽略一个特定的表(即跳过迁移的现有表)时,我不知道这会如何工作。 modelBuilder.Ignore();没有意义,因为我们想要绑定。
    • @Spock 它的工作原理是这样的:您首先要确保没有任何需要添加迁移的模型更改,并且设置了您希望迁移忽略的类。然后使用-IgnoreChanges 标志运行Add-Migration。这将创建一个迁移,其中包括快照中的新模型,但不会为它们添加迁移步骤。结果是,只要您不修改这些“被忽略的模型”,它们将继续被排除在未来的迁移之外。这基本上就是您在博客中所做的,但无需手动修改迁移文件。
    【解决方案2】:

    在这种情况下,正确的工作流程是在添加更改(新类)之前创建第一个迁移,而不是添加新类,然后再创建新迁移,您将只有新表。

    如果您到目前为止没有使用迁移,框架将为您在项目中拥有的所有表生成迁移,因为它认为您正在创建初始迁移。生成迁移后,您可以修改其源文件并从 Up 方法中删除旧类的 CreateTable 代码。 问题是您可能必须在任何后续迁移中执行此操作。

    编辑:我写了一个 walkthrough 用于使用 EF 4.3.1 向现有项目添加迁移

    【讨论】:

    • 表将包含在该迁移的元数据中,因此它们不会在后续迁移中重新出现。
    • 这是否适用于 AutomaticMigrationEnabled = true?
    • @Spock 是的,应该。确保您的数据库是最新的。然后添加您要忽略的类。然后运行 ​​Add-MigrationIgnoreChanges 以创建基于代码的迁移,无需创建表即可更新元数据。
    • @LadislavMrnka 在手动进行迁移时有没有办法做到这一点?我有以下情况stackoverflow.com/questions/28815309/…
    猜你喜欢
    • 2022-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    相关资源
    最近更新 更多