【问题标题】:How to retrieve last insert id from database [duplicate]如何从数据库中检索最后一个插入 ID [重复]
【发布时间】:2016-01-21 09:31:57
【问题描述】:

我使用实体框架将数据插入到表中,但现在我需要从上次执行的查询中检索最后一个 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 = ??

【问题讨论】:

  • 如果可以使用安全的 sql 参数,为什么还要进行字符串连接?
  • 不确定代码是否准确,但您应该可以使用 .OrderByDescending 对 id 进行降序排序,然后选择此列表中的第一项。
  • 如果您要手动构建简单的 SQL 查询,为什么还要使用 EntityFramework?请参阅stackoverflow.com/questions/5212751/… 以获取您的问题的答案以及如何对其进行编码的示例。如果您想从查询中返回最新的 ID,请将 SELECT SCOPE_IDENTITY() 添加到其中。
  • 在sql中使用scope_identity()会返回最后一个id
  • 什么关系型数据库?我不知道实体框架是否有一些内置属性,但是要从数据库中获取最后一个自动生成的 id 取决于 RDBMS,而且,“最后一个自动生成的 id”这句话本身是模棱两可的.

标签: c# sql asp.net-mvc entity-framework


【解决方案1】:

如果您实际上使用 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 中做任何事情

【讨论】:

    【解决方案2】:

    你可以尝试像这样使用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 注入是一种标准做法。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 2023-03-14
    • 2010-12-31
    • 1970-01-01
    相关资源
    最近更新 更多