EF / MVC4 / SQL Server:ALTER TABLE和FOREIGN KEY约束选项?

时间:2013-05-30 18:57:34

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

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

Jobs.JobID = Docs.JobID

错误:

  

ALTER TABLE语句与FOREIGN KEY约束冲突

我知道为了解决这个问题,我必须做以下其中一项:

  1. 删除所有表格数据,然后创建关系。
  2. 添加或删除缺少所有JobID的记录/ null,然后创建关系。
  3. 问题是,有大约25,000条记录缺少ID,所以我想知道更改SQL Server中的关系选项是否能解决这个问题而不会导致问题?我看到以下内容:

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

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

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

1 个答案:

答案 0 :(得分: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