2013-06-24 61 views
0

我正在創建一個新的EntityObject,它不存在於數據庫(SQLite)中。我填充對象的屬性並將其連接到父對象。我沒有填充主鍵屬性,因爲據我所知EF會自動爲我生成一個臨時EntityKey。 然後我使用AddObject方法將新創建的EntityObject添加到上下文中,之後我調用SaveChanges。Temporary EntityKey not generated

我收到UpdateException:由於違反約束而中止 PRIMARY KEY必須是唯一的。 我看到主鍵屬性始終設置爲0,儘管它應該是數據庫中的下一個可用值,對吧? 我檢查了在數據庫中的主鍵字段是自動增量。

我該怎麼做才能讓EF給我一個臨時的EntityKey?

回答

0

EF不會爲您創建臨時密鑰。你需要自己生成臨時密鑰。

你可以做什麼:在你的模型中添加一個屬性,用[NotMapped]屬性裝飾。在創建對象時,這個值應該用一個值初始化。 Guids很好地解決了這個問題。您只需使用Guid.NewGuid()爲您生成一個臨時密鑰。

[NotMapped]確保您的字段不會在數據庫中持久化。

+0

問題出在數據庫本身。它沒有自動增加數據庫表中的主鍵,現在情況已經解決。 – Nuts