0

我正在使用 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 时解决这个问题的唯一方法,但我不确定?让我知道解决这个问题的正确方法。谢谢!

4

1 回答 1

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

于 2013-05-31T04:14:44.327 回答