2013-12-23 54 views
0

我已經創建了一個基本的實體框架測試項目,該項目使用Code-First方法來填充具有兩個表的數據庫。爲什麼EntityFramework代碼首先忽略代碼中設置的關鍵值

但是,我注意到框架似乎是自動分配一個值作爲外鍵用於另一個表的條目,儘管我已經在代碼中設置了該值。

通過調試器檢查時,我可以看到對象的屬性是正確的,直到調用SaveChanges()爲止,但在檢查數據庫時,我設置的int已被自動生成的值覆蓋。

我可以通過應用下列屬性的財產解決這個問題:

[Key] 
[DatabaseGenerated(DatabaseGeneratedOption.None)] 

但是,我認爲,如果沒有值已在代碼中設置只自動生成的值。我錯了,還是這樣的行爲是可以預料的?

我已經注意到,對於不充當外鍵的主鍵,相同的行爲並非如此。

任何幫助非常感謝。

+0

請給我們一些代碼。 –

+0

很難說沒有看到更多,但我會猜測。您正在設置外鍵列上的[Key]屬性?如果是這樣,那麼不要。據我瞭解,[Key]是主鍵,不應該用來定義外鍵。 –

+0

非常感謝,雖然我沒有添加任何屬性到屬性,直到我遇到問題。 – user1762339

回答

3

[關鍵]
[DatabaseGenerated(DatabaseGeneratedOption.None)

註釋或流暢API相當於是,如果使用密鑰INT標識要求以及要提供的ID。

Ef Annotations Id默認行爲int

+0

這個解釋當然與我見過的行爲一致 - 除非應用上述屬性,否則我提供的int關鍵值將被覆蓋。外鍵是一個紅鯡魚;鍵值沒有被覆蓋的情況下,正在使用字符串而不是int。 – user1762339

相關問題