如何在EF Core中获取新添加的实体

时间:2019-06-12 15:19:54

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

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

    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
    }

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

我知道的一个选项是将新实例添加到列表中,并使用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

2 个答案:

答案 0 :(得分:0)

似乎没有内置函数。不过,您可以使用通用的扩展方法。

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
    }));

答案 1 :(得分:0)

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