Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取sql server中最后一个插入的行,该行的id为主键,并且是标识_C#_Asp.net_Asp.net Mvc_Linq_Asp.net Mvc 4 - Fatal编程技术网

C# 获取sql server中最后一个插入的行,该行的id为主键,并且是标识

C# 获取sql server中最后一个插入的行,该行的id为主键,并且是标识,c#,asp.net,asp.net-mvc,linq,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Linq,Asp.net Mvc 4,我尝试了几种方法使用linq查询来检索插入sql server表中的最后一行 我需要这样的东西 var lastId = from u in context.sistema_Documentos where u.id == max select u; 有些人说这是不可能的,有些人说这是不安全的,或者会严重影响性能。。如何执行此查询 附言。。这是一个好方法吗 var lastId = from u in context.sistema_Documentos orderby u.id descen

我尝试了几种方法使用linq查询来检索插入sql server表中的最后一行

我需要这样的东西

var lastId = from u in context.sistema_Documentos where u.id == max select u;
有些人说这是不可能的,有些人说这是不安全的,或者会严重影响性能。。如何执行此查询

附言。。这是一个好方法吗

var lastId = from u in context.sistema_Documentos orderby u.id descending select u.id;

无性能问题,简单明了的查询:

var lastId = (from u context.sistema_Documentos
             Select u.id).Max();
但是,如果您的场景是希望在一个uppdate中设置某种主-详细关系,那么这可能不是正确的方法。在这种情况下,您应该使用实体本身。正如Joel提到的,它并不总是返回最后一个

例如


这将在一个事务中正确处理PK/FK分配。

在执行
SubmitChanges()
方法后,您要查找的标识值可用。你可以这样读:

context.InsertOnSubmit(entityToInsert);
context.SubmitChanges();
Var lastinsertedId = entityToInsert.Id;

这个问题有用吗?这种方法在高使用率系统中是绝对不安全的。你打算怎么做?你需要它做什么?您正在执行插入操作,只需要插入的ID吗?它是在插入实体后立即插入的,或者它不相关?如果我真的想知道每一行是何时插入的,我会针对每一行存储一个日期时间,但不确定我是否只想依赖自动递增标识列的值。是否要调用
scope\u identity()
在插入
后立即运行
。这里的
上下文是什么?EF或linq到sql?在高使用率系统中,此方法是不安全的。如果你有很多次插入,可能会得到一个不正确的id。没错,我没有读“最后一次插入”,这种方法确实显示了最大id。坏主意,如果有人在你之后插入呢?@Jodrell:读我的更新。OP的伪代码是我改为在Linq中工作的代码。它在功能上不是最后一个插入的,但它是在执行点具有最高Id的。这一点是,使用数据库的主要原因之一是允许并发访问数据,对吗?因此,多个用户可能同时尝试插入或删除数据。通过查询获取max id,即使是在完成插入后,也不需要是刚刚插入的id。可能插入了另一行、删除了您的行、更改了标识种子并插入了另一行。你不知道。在我发表上述评论后,我正在准备这个答案,但工作被打扰了,我错过了我的窗口:)@JoelEtherton-是的,我知道。我在工作中总是有这个问题。
context.InsertOnSubmit(entityToInsert);
context.SubmitChanges();
Var lastinsertedId = entityToInsert.Id;