努力使用 EF 执行命令在插入后获取新 ID
Struggling with EF's Execute Commands to get the newest ID after an insert
我在 ASP.NET 4.5 上使用 EF6.1 直接针对数据库 (SQL Server 2008) 发出插入语句。我需要在事务 post 插入中获取最新的 ID,但是我不太明白代码。
这是我目前拥有的:
db.ExecuteStoreCommand("INSERT INTO Order ([SupplierId]) Values ({0})", SID);
Int32 intId = db.ExecuteStoreQuery<Int32>("SELECT SCOPE_IDENTITY()").First();
var myOrder = db.Order.First(r => r.Id == intId);
上面的例子被简化了。是否可以组合命令,例如类似的东西,或者什么?
Int32 intId = db.ExecuteStoreQuery<Int32>("INSERT INTO Order ([SupplierId]) Values ({0}); SELECT SCOPE_IDENTITY()",SID).First();
提前致谢。
我的怀疑是正确的。这有效:
Int32 intId = (Int32)db.ExecuteStoreQuery<Decimal>("INSERT INTO Order ([SupplierId]) Values ({0}); SELECT SCOPE_IDENTITY();", SID).First();
希望这对某人有所帮助。
编辑:根据 Gert 的回答,我已将其从 @@IDENTITY 更改为使用 SCOPE_IDENTITY,更多信息也在 More Information about Scope_Identity
我在 ASP.NET 4.5 上使用 EF6.1 直接针对数据库 (SQL Server 2008) 发出插入语句。我需要在事务 post 插入中获取最新的 ID,但是我不太明白代码。
这是我目前拥有的:
db.ExecuteStoreCommand("INSERT INTO Order ([SupplierId]) Values ({0})", SID);
Int32 intId = db.ExecuteStoreQuery<Int32>("SELECT SCOPE_IDENTITY()").First();
var myOrder = db.Order.First(r => r.Id == intId);
上面的例子被简化了。是否可以组合命令,例如类似的东西,或者什么?
Int32 intId = db.ExecuteStoreQuery<Int32>("INSERT INTO Order ([SupplierId]) Values ({0}); SELECT SCOPE_IDENTITY()",SID).First();
提前致谢。
我的怀疑是正确的。这有效:
Int32 intId = (Int32)db.ExecuteStoreQuery<Decimal>("INSERT INTO Order ([SupplierId]) Values ({0}); SELECT SCOPE_IDENTITY();", SID).First();
希望这对某人有所帮助。
编辑:根据 Gert 的回答,我已将其从 @@IDENTITY 更改为使用 SCOPE_IDENTITY,更多信息也在 More Information about Scope_Identity