2011-09-21 45 views
2

我已經在現有的數據庫表上定義了一個ID列設置爲[Key]的模型類。該表的字段定義爲主鍵int,非空。它不是和身份專欄。插入代碼第一whith非身份id密鑰失敗

在代碼中創建新記錄時,我在調用SaveChanges()方法之前在代碼中設置ID列(以唯一值)。

該方法返回的錯誤:

Cannot insert the value NULL into column 'xxx_id', table 'xxx.dbo.xxxxxx'; column does not allow nulls. INSERT fails. The statement has been terminated.

看來,EF假定ID列是標識列,因此沒有通過ID在SQL調用數據庫。

有沒有辦法來定義ID列告訴EF這就是它不是一個標識列,並在SQL調用

回答

9

您需要指定屬性的DatabaseGeneratedOption傳遞價值。在這種情況下,DatabaseGeneratedOption應該是None。

參見:http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.databasegeneratedoption%28v=vs.103%29.aspx

我通常都用流利的coniguration像這樣做:

Property(p => p.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 

..但它看起來像這也與屬性來指定。見http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.databasegeneratedoption%28v=vs.103%29.aspx

[DatabaseGenerated(DatabaseGeneratedOption.None)] 
+0

我有同樣的問題,我在這裏https://stackoverflow.com/questions/45150890/table-not-incrementing-after-an-insert-in-asp-net張貼的問題-mvc/45153161?noredirect = 1個#comment77324329_45153161 – Guzzyman