【问题标题】:EF Code First Migrations and Foreign Key ConstraintsEF 代码优先迁移和外键约束
【发布时间】:2017-08-10 14:04:45
【问题描述】:

一旦在 ASP.NET Core Code First 应用程序中通过实体 Framework Core 1.1 with Migrations 创建了 FK 约束,是否可以在不使用 EF 的情况下直接在 SQL Server 中临时启用/禁用约束 - 是否会破坏创建的迁移通过EF等? 背景:我需要截断表中的数据,该表已通过通过 EF Code First 创建的 FK 被多个表引用。正如预期的那样,SQL Server 抱怨您可以截断表,因为它已被 FK 等引用。

【问题讨论】:

  • 您还可以将 SQL 脚本添加到迁移文件中。这样您将拥有更大的灵活性。
  • @lgnas 我们该怎么做?
  • 如果您只是暂时禁用约束来截断数据(并确保所有引用的数据也被删除,否则数据库将最终处于不一致状态)然后重新启用它们后迁移将只是美好的。只要您在 EF 管理的对象方面将数据库置于与以前相同的状态并且数据处于一致状态,就可以了。
  • @Smit 谢谢。这就是我需要知道的。

标签: sql-server entity-framework sql-server-2012 asp.net-core entity-framework-core


【解决方案1】:

不,它不会破坏迁移。如果您在数据库上做任何事情,然后将数据库的架构设计恢复到早期状态,那么迁移将运行良好。应用迁移时,期望数据库中 EF 托管对象的形状保持不变(正如它之前所知道的那样)。任何临时更改对迁移都是不可见的。之后的状态需要相同,因为当应用未来的迁移时,会出现适当的对象,否则 DDL 可能会导致失败。

【讨论】:

    【解决方案2】:

    您在 SQL Server 中的数据库架构中所做的任何更改(无需代码)都会中断迁移。您应该删除代码中要执行的操作的外键引用,然后再重新创建它们。不过请注意,如果您的数据处于不一致的状态,您可能无法在不丢失数据的情况下重新创建约束。

    【讨论】:

    • 我没有更改架构,即没有删除约束只是暂时禁用它们。
    • 仍然会在内部使用命令“ALTER TABLE TableName NOCHECK CONSTRAINT ConstraintName”,因此会中断迁移。
    • 因为我要禁用它们temporarily 我会重新启用它们
    猜你喜欢
    • 2014-03-28
    • 2013-07-29
    • 2016-05-26
    • 2016-03-18
    • 2019-06-15
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    相关资源
    最近更新 更多