2013-05-30 28 views
0

我與實體框架MVC4和SQL Server編碼和我遇到了一個錯誤,當我創建這個關係:EF/MVC4/SQL Server:ALTER TABLE和FOREIGN KEY約束選項?

Jobs.JobID = Docs.JobID 

錯誤:

The ALTER TABLE statement conflicted with the FOREIGN KEY constraint

我知道,爲了解決這個問題我必須執行以下操作之一:

  1. 刪除所有表數據,然後創建關係。
  2. 添加或刪除所有JobID缺失/空的記錄,然後創建關係。

的問題是,大約有25000條記錄與標識缺少的,所以我想知道,如果改變SQL Server中的關係選項會解決這個問題的w/o造成的問題?我看到以下內容:

  • 檢查現有的數據在創建:是
  • 強制執行複製:是
  • 強制執行外鍵約束:是

有誰知道這是否會解決問題當嘗試使用.Include命令將數據鏈接到MVC4時不會導致任何問題?獲取鏈接數據以使用.Include命令顯示是我爲什麼這樣做的真正目的,但我對它將影響.edmx文件的工作方式,實體框架命令或項目的方式持懷疑態度。

也許有解決這個更簡單的方法,或者可能添加/刪除25K的記錄是MVC4/EF工作時來解決這個唯一的方法,但我不知道?讓我知道正確的方式去做這件事。謝謝!

回答

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

+0

感謝您的答覆。你認爲相當於這是強制外鍵約束:否和檢查現有數據創建=否?如果它是相同的,我想先在嚮導中嘗試一下。 – ForeverLearningAndCoding

+0

我會這樣認爲的。我認爲'強制外鍵約束'相當於'FK enabled yes | no',並且當您再次啓用該鍵時,「檢查​​現有數據開啓」選項將發揮作用。 – souplex

+0

我認爲這有效,但我將不得不做更多的編碼和測試,以確保它不會在別處造成問題,然後再將其標記爲正確答案。感謝您的幫助,希望在我完成測試的時候一切順利! – ForeverLearningAndCoding