【问题标题】:How to get newly added entities in EF Core如何在 EF Core 中获取新添加的实体
【发布时间】:2019-06-12 15:19:54
【问题描述】:

我通过使用内联语法创建实例来添加新实体。

    public async Sys.Task<IEnumerable<Car>> CreateCars()
    {
        for (int i = 0; i < 2; i++)
        {
            await _dbContext.Cars.AddAsync(new Car()
            { 
               // set properties here                 
            });
        }

        await _dbContext.SaveChangesAsync();

        // How do return list of newly added Cars here without querying database
    }

如何在不查询数据库的情况下返回新添加的汽车?

我知道的一个选项是将新实例添加到列表中,并使用 dbContext 的AddRange 方法,如下所示

    public async Sys.Task<IEnumerable<Car>> CreateCars()
    {
        var list = new List<Car>();
        for (int i = 0; i < 2; i++)
        {
            list.Add(new Car()
            {

            });
        }

        await _dbContext.Cars.AddRangeAsync(list);
        await _dbContext.SaveChangesAsync();

        return list;          
    }

但我想避免创建不必要的列表实例。 我正在使用 EF Core 2.2.4

【问题讨论】:

    标签: entity-framework ef-core-2.0 ef-core-2.2


    【解决方案1】:

    似乎没有内置函数。不过你可以制作一个通用的扩展方法。

    public static class DbSetExtensions
    {
        public static async Task<T[]> AddRangeAsyncExt<T>(this DbSet<T> dbSet, params T[] entities) where T : class
        {
            await dbSet.AddRangeAsync(entities);
            return entities;
        }
    
        public static async Task<IEnumerable<T>> AddRangeAsyncExt<T>(this DbSet<T> dbSet, IEnumerable<T> entities) where T : class
        {
            await dbSet.AddRangeAsync(entities);
            return entities;
        }
    }
    
    // use case 1
    var cars = await _dbContext.Cars.AddRangeAsyncExt(new Car(), new Car(), new Car());
    
    // use case 2
    var cars = await _dbContext.Cars.AddRangeAsyncExt(
        new[] { 1, 2, 3 }
        .Select(i => new Car
        {
            // set properties here
        }));
    

    【讨论】:

      【解决方案2】:

      使用Cars DbSet 的Local 属性。 I 包含被跟踪实体的本地视图。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-15
        • 2018-06-29
        • 2015-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多