2016-01-21 97 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

相关问题