2016-01-21 99 views
0

我使用實體框架將數據插入到表中,但現在我需要從上次執行的查詢中檢索最後一個ID。如何從數據庫檢索最後一個插入ID

這裏是我的代碼

var filedbdata = "'" + FileTitle + "'" + "," + 
       "'" + path + "'" + "," + 
       "'" + Session["UserID"] + "'"; 

var query = "insert into File_Upload(file_title,file_loc,file_userid) values(" + filedbdata + ")"; 

db.Database.ExecuteSqlCommand(query); 
db.SaveChanges(); 

int lastid = ?? 
+3

爲什麼字符串連接,如果你可以使用安全的SQL參數? –

+0

完全不確定代碼,但您應該可以通過使用.OrderByDescending降序排列數據來訂購數據,然後選擇此列表中的第一項。 – James

+3

爲什麼你使用EntityFramework如果你正在手動構建簡單的SQL查詢呢?請參閱http://stackoverflow.com/questions/5212751/how-can-i-get-id-of-inserted-entity-in-entity-framework以獲取您的問題的答案,以及如何編寫代碼的示例。如果您想從查詢中返回最新的ID,請添加'SELECT SCOPE_IDENTITY()'。 –

回答

1

你可以嘗試使用OUTPUT這樣的:

OUTPUT子句

返回插入行作爲插入操作的一部分。結果可以返回到處理應用程序 或插入到一個表或 表變量進行進一步處理。

var query = "insert into File_Upload(file_title,file_loc,file_userid) OUTPUT INSERTED.ID values(" + filedbdata + ")"; 

,並檢索它,你可以簡單地使用

int id = (int)command.ExecuteScalar 

而且這將是更好地使用parameterized query而不是使用字符串連接。避免SQL注入是一種標準做法。

+0

+1我喜歡這個主意,但我希望你閱讀[參數化SQL:評論由Jon Skeet](http://stackoverflow.com/questions/34848805/getting-value-from-a-database-using-textbox/ 34848901#comment57437927_34848901) –

+0

@MohitShrivastava: - 給它添加了註釋。 –

3

如果你是實際使用 EF通過創建一個新的對象並將其存儲,那你將獲得由EF新Id - 自由,就是這樣!

// create new object to insert 
FileUpload fu = new FileUpload(); 
fu.file_title = FileTitle; 
fu.file_loc = path; 
fu.file_userid = Session["UserID"]; 

// add new object to database context and save it 
db.FileUploads.Add(fu); 
db.SaveChanges(); 

// you get back the newly created "ID" FOR FREE! 
int lastid = fu.file_id; 

如果您使用實體框架 - 使用EF和停止盡一切辛苦「原始」,低級別的SQL

相關問題