Как получить новые добавленные объекты в EF Core - PullRequest
0 голосов
/ 12 июня 2019

Я добавляю новую сущность, создавая экземпляр с использованием встроенного синтаксиса.

    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
    }

Как вернуть только что добавленный Автомобиль, не запрашивая базу данных?

Один из известных мне вариантов - добавить новый экземпляр в список и использовать AddRange метод dbContext, как показано ниже

    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

1 Ответ

0 голосов
/ 19 июня 2019

Кажется, для этого нет встроенной функции.Вы можете сделать общий метод расширения, хотя.

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
    }));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...