2010-11-01 45 views
31

我在多個表中插入數據。我需要知道表中最後插入的(自動遞增的)ID。我需要將它用作其他表格中的Foriegn Key。如何在實體框架中找到最後插入的行的標識?

簡而言之,我需要在T-Sql中替代@@Identity

+0

@Steven - 這應該張貼一個答案。 – Yakimych 2010-11-01 11:06:54

+3

**建議**使用'SCOPE_IDENTITY()'而不是'@@ IDENTITY'。 – Esteban 2013-06-08 06:59:45

回答

69

實體框架會自動加載最後插入的ID來填充插入實體的主鍵列:

var customer = new Customer() { Name = "Steven" }; 

context.AddObject(customer); 

context.SaveChanges(); 

var id = customer.Id; 

注意,Id屬性調用SaveChanges()萬一StoreGeneratedPattern屬性設置爲後才被填充模型「存儲」部分中自動遞增的ID列的「標識」或「計算」。

+5

只有在模型的存儲部分中的StoreGeneratedPattern屬性設置爲「Identity」或「Computed」以用於自動遞增的ID列時,纔是正確的。 – Devart 2010-11-01 12:15:47

2

總之,如果你需要的ID爲某些其他目的......調用EF插入方法對於一些實體自動返回當前插入的行ID ...

var rowId=db.Insert(Entity); 

我猜... PLZ讓我知道,如果我錯了....米JST在EF初學者..

0

可能,這將幫助:

var erp = new UserDataContext(); 

string euname = "Ded"; 

string eupassword = "Moro$ilka"; 

string eposition = "Moroz"; 

var status = erp.Database.ExecuteSqlCommand(@"EXEC InsertNewUser @neuname,@neupassword,@neuposition", 
new SqlParameter("@neuname",euname), 
new SqlParameter("@neupassword",eupassword), 
new SqlParameter("@neuposition",eposition) 
); 

erp.SaveChanges(); 

int lastid = erp.eusers.Count(); 
相關問題