2011-12-08 66 views
35

當通過實體框架4.1添加記錄時,是否有直接的方式來檢索數據庫自動生成的主鍵?通過EF插入後獲取自動標識密鑰

例如:

dbcontext.Entity_Tables.Add(new Entity_Table { item1 = val1, item2 = val2 }); 
dbcontext.SaveChanges(); 
newPK = ???; 

的SQL相當於將是:

newPK = executeOnDB("INSERT INTO Entity_Table (item1, item2) VALUES (val1, val2);SELECT @@Indentity";); 

順便說一句,我使用的是MySQL,但SQL是一樣的MSSQL

+5

我只想指出'SELECT @@ Identity'不是獲取最後插入的id的好方法。你應該使用'SCOPE_IDENTITY()' – Icarus

+0

謝謝伊卡洛斯。我從未意識到這一點。猜猜我應該更新我的一些舊應用程序! – chrisg229

+0

[我如何獲得插入實體的Id在實體框架中的可能的重複?](http://stackoverflow.com/questions/5212751/how-can-i-get-id-of-inserted-entity-in-entity -framework) –

回答

73

我相信EF應更新您的實體對象的身份:

var entity = new Entity_Table { item1 = val1, item2 = val2 }; 
dbcontext.Entity_Tables.Add(entity); 
dbcontext.SaveChanges(); 
int newPK = entity.ID; 
+3

我剛剛確認這正是它所做的。非常感謝ob! – chrisg229

+2

當我插入時,在表上有一個InsertBefore觸發器,它添加了它自己的屬性,所以即使保存更改正在執行,插入之前也被插入替換,所以返回的ID爲0,並且ID的實際價值是別的。在那種情況下,我如何獲得價值? – Mahesh

相關問題