【问题标题】:EF / MVC4 / SQL Server: ALTER TABLE and FOREIGN KEY constraint options?EF / MVC4 / SQL Server:ALTER TABLE 和 FOREIGN KEY 约束选项?
【发布时间】:2013-05-30 18:57:34
【问题描述】:

我正在使用 Entity Framework MVC4 和 SQL Server 进行编码,创建此关系时遇到错误:

Jobs.JobID = Docs.JobID

错误:

ALTER TABLE 语句与 FOREIGN KEY 约束冲突

我知道要解决此问题,我必须执行以下操作之一:

  1. 删除所有表数据,然后创建关系。
  2. 添加或删除所有JobID 缺失/为空的记录,然后创建关系。

问题是,大约有 25,000 多条记录缺少 ID,所以我想知道更改 SQL Server 中的关系选项是否会解决此问题而不会导致问题?我看到以下内容:

  • 在创建时检查现有数据:是
  • 强制复制:是
  • 强制外键约束:是

在尝试使用.Include 命令将数据与 MVC4 链接时,有谁知道这是否会解决问题并且不会导致任何问题?使用.Include 命令获取链接数据以显示是我这样做的真正目的,但我怀疑它会在多大程度上影响 .edmx 文件的工作方式、实体框架命令或一般项目。

也许有更简单的方法来解决这个问题,或者添加/删除 25k 记录是使用 MVC4/EF 时解决这个问题的唯一方法,但我不确定?让我知道解决这个问题的正确方法。谢谢!

【问题讨论】:

    标签: sql-server entity-framework asp.net-mvc-4


    【解决方案1】:

    我不知道从 EF 模型中执行此操作的方法。但是您可以在 Sql Server 上创建这样的外键,然后通过“从数据更新模型”命令更新您的 EF 模型。

    首先,您将创建一个“禁用”FK。然后在不检查现有数据的情况下启用 FK。

    -- creates a foreign key -> but it is disabled
    ALTER TABLE dbo.T2 WITH NOCHECK 
    ADD CONSTRAINT FK_T2_T1 
    FOREIGN KEY (Fk) REFERENCES dbo.T1(Id);
    
    -- now enable it without checking the existing data in the table:
    ALTER TABLE dbo.T2
    CHECK CONSTRAINT FK_T2_T1;
    
    -- fyi, the syntax for enabling AND checking integrity looks like this:
    ALTER TABLE dbo.T2
    WITH CHECK CHECK CONSTRAINT FK_T2_T1;
    

    http://sqlfiddle.com/#!3/eccf72/4

    【讨论】:

    • 感谢您的回复。您是否认为这相当于强制外键约束:否并在创建时检查现有数据 = 否?如果相同,我想先在向导中尝试。
    • 我会这么认为。我认为“强制外键约束”相当于“启用 FK 是|否”,当您再次启用该键时,“创建时检查现有数据”选项就会发挥作用。
    • 我认为这行得通,但在我将此标记为正确答案之前,我必须进行更多的编码和测试,以确保它不会在其他地方造成问题。感谢您的帮助,希望在我完成测试时一切都好!
    • 另外仅供参考:我在 SQL Server Management Studio 中使用了关系向导,而不是上面的 SQL,更改了创建时检查现有数据并强制执行外键约束 = NO 并留下强制复制 = YES。
    • 到目前为止效果很好。尚未遇到任何数据问题,希望它保持这种状态,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 2018-10-12
    相关资源
    最近更新 更多