2016-01-20 46 views
1

當我運行下面的代碼,我得到實體框架失敗,因爲相同類型的另一個實體已具有相同的主鍵值。外鍵

try { 
    var questionRepo = new QuestionRepository(db); 
    var question = new Question(); 

    question.QuestionText = text; 
    question.QuestionCategory = SelectedQuestionCategory; 
    db.QuestionCategory.Attach(SelectedQuestionCategory); 

    //Tried adding 
    //db.Entry(question).State = System.Data.Entity.EntityState.Added; 

    questionRepo.Add(question); 
    db.SaveChanges(); 
} catch (Exception ex) { 
    Debug.WriteLine(ex.Message); 
    return; 
} 

沒有錯誤,當我以前沒有使用過的QuestionCategory,但我得到一個錯誤,如果我有。

該錯誤僅在我已經在我的數據庫中選擇SelectedQuestionCategory時有問題。我再次檢查了數據庫,Question的主鍵位於id列,而不是QuestionCategory

我得到的錯誤是:

附加型「QuestionCategory」的實體失敗 因爲同類型的另一實體已經具有相同的主 鍵值。

爲什麼它在等外鍵上失敗,而外鍵不是組合主鍵或主鍵?

回答

1

可能是您添加問題時EntityFramework嘗試向連接到問題的數據庫添加另一個QuestionCategory新實例。 嘗試使用Id 更改QuestionCategory的對象狀態。

question.QuestionCategory = null; 
question.QuestionCategoryId = SelectedQuestionCategory.Id; 
0

首先,問題似乎與QuestionCategory上的PK而不是Question有關。 SelectedQuestionCategory如何設置?你是否用你想要的值new()了一個QuestionCategory實例?如果是這樣,你無意中嘗試添加具有相同PK的第二個實例。在這種情況下,您可能會更好地從db.QuestionCategory中檢索現有實例,因爲您已經擁有了DbContext。

+0

SelectedQuestionCategory是通過下拉菜單{binding} wpf查看的值。 –

+0

研究如何創建這些實例,並確保在您從數據庫中提取這些實例時,您沒有使用.AsNotTracking()來跟蹤它們。 – richardsonmarkj

相關問題