我通过使用内联语法创建实例来添加新实体。
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
答案 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
属性。我包含被跟踪实体的本地视图。