如何在Entity Framework Core插入数据时跟踪成功插入数量并返回该值?
如何跟踪EF Core插入操作的成功记录数量?
当然可以,而且实现起来很简单:EF Core的SaveChangesAsync()方法本身就会返回本次操作中受影响的数据库行数,对于你的插入场景来说,这个数值就是成功插入的记录数。
你可以直接修改方法的返回类型,接收并返回SaveChangesAsync()的结果。另外注意你代码里的entry.State = EntityState.Added是多余的——Add()方法已经自动把实体的状态设置为Added了,没必要手动重复设置。
优化后的代码如下:
public async Task<int> InsertInactiveUsersAsync(IEnumerable<User> users) { // 用AddRange批量添加,比循环Add更高效 _context.Set<User>().AddRange(users); // SaveChangesAsync返回受影响的行数,也就是成功插入的记录数 return await _context.SaveChangesAsync(); }
补充说明:
- 使用
AddRange()替代循环调用Add(),能减少EF Core上下文的状态跟踪开销,批量操作的性能更优。 - 如果插入过程中没有抛出异常,返回的数值应该等于传入的
users集合的元素总数;如果有实体因验证失败、数据库约束冲突等问题无法插入,EF Core会直接抛出异常,此时不会有部分数据插入(默认是事务性操作)。
内容的提问来源于stack exchange,提问作者user989988
相关产品推荐
相关产品推荐

