【问题标题】:Get Id's of recently inserted rows in Entity Framework获取实体框架中最近插入的行的 ID
【发布时间】:2017-09-08 16:32:25
【问题描述】:

我根据以下帖子将行批量插入到表中(该表有一个标识列,每次插入新行时都会自动递增)

https://stackoverflow.com/a/5942176/3861992

插入所有行后,如何获取最近插入的行的id列表?

谢谢

【问题讨论】:

    标签: c# sql entity-framework


    【解决方案1】:

    EntityFrameWork(EF) 在插入实体和SaveChanges() 之后。 它设置 Id 的值。
    假设您要进入数据库的实体如下:

     public class EntityToInsert
      {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
      }
    

    而你想插入一个实体列表:

     var list = new List<EntityToInsert>()
            {
                new EntityToInsert() {Name = "A", Age = 15},
                new EntityToInsert() {Name = "B", Age = 25},
                new EntityToInsert() {Name = "C", Age = 35}
            };
            foreach (var item in list)
            {
                context.Set<EntityToInsert>().Add(item);
            }
            context.SaveChanges();
           // get the list of ids of the rows that are recently inserted
            var listOfIds=list.Select(x => x.Id).ToList();
    

    我希望这会有所帮助。

    【讨论】:

    • 如果我要插入 100,000 条记录,这种方法会最快吗?
    • 不,不是。您可以使用“dapper”ORM 或使用“存储过程”来插入大量数据并返回插入的 id。 EF 是最慢的 ORM 之一。
    【解决方案2】:

    当所有行都真正插入数据库时​​(在实体框架中调用SaveChanges()后),这些行的真实ID被填充。

    所以在SaveChanges() 之后,您将在插入的对象中拥有 ID,而无需进行任何查询。

    【讨论】:

      【解决方案3】:

      试试这个: dbcontext.Entry([object]).GetDatabaseValues();

      这是单行。如果我现在的互联网连接不是那么慢,我会查看文档以查看是否容易获得多行。至少您可以遍历数据库对象列表并获取每个条目的值。然而,这可能不是最快的解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-02
        • 1970-01-01
        • 2012-08-30
        • 2018-12-12
        • 2011-01-06
        • 2020-09-12
        相关资源
        最近更新 更多