【问题标题】:How to find an identity of the last inserted row in Entity Framework?如何在实体框架中找到最后插入行的标识?
【发布时间】:2010-11-01 10:25:24
【问题描述】:

我在多个表中插入数据。我需要知道表中最后插入的(自动递增的)ID。我需要将它用作其他表中的外键。

简而言之,我需要在 T-Sql 中替代 @@Identity。

【问题讨论】:

  • 推荐使用SCOPE_IDENTITY()而不是@@IDENTITY。

标签: .net entity-framework


【解决方案1】:

Entity Framework 会自动加载最后插入的 id 来填充插入实体的主键列:

var customer = new Customer { Name = "Steven" };

context.AddObject(customer);

context.SaveChanges();

var id = customer.Id;

请注意,Id 属性仅在调用 SaveChanges() 后才会填充,以防模型存储部分中的自动递增 ID 列的 StoreGeneratedPattern 属性设置为“身份”或“计算”。

【讨论】:

  • 只有在模型的 Storage 部分中的自动递增 ID 列的 StoreGeneratedPattern 属性设置为“Identity”或“Computed”时才正确。
【解决方案2】:

无论如何,如果您需要 id 用于任何其他目的...为某些实体调用 EF Insert 方法会自动返回当前插入的行 id ...

var rowId=db.Insert(Entity); 

【讨论】:

  • 没有Insert 方法,EF 的Add 方法not返回标识值。这个答案没有意义。
【解决方案3】:

您也可以使用此代码查看数据库的最后一列。

var lastColumn = context.YourTable.OrderBy(x=>x.Id).LastOrDefault();

【讨论】:

  • 不保证返回值来自你自己的插入。可能有并发用户。接受的答案是直到今天为止唯一正确的答案,尽管语法已经改变。
猜你喜欢
  • 1970-01-01
  • 2011-09-12
  • 2023-03-10
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
  • 2017-03-15
  • 2020-11-22
  • 1970-01-01
相关资源
最近更新 更多