.NET Core API+React:插入Opportunity后如何获取新增数据ID及详情?
获取批量插入商机后的ID列表解决方案
嘿,这个问题其实很容易解决——EF Core本身就帮你处理了ID回填的工作,只需要稍微调整一下代码就能拿到新增商机的ID列表了!
核心思路
当你调用SaveChangesAsync()将实体插入数据库时,如果你的Opportunity实体的Id是数据库自动生成的主键(比如SQL Server的自增列),EF Core会自动把数据库生成的ID值回填到对应的实体对象的Id属性中。所以我们只需要在插入前把所有新建的Opportunity实体收集起来,在SaveChangesAsync()执行后就能直接提取它们的ID了。
修改后的代码
// 先创建一个列表来存储所有新建的商机实体 var newOpportunities = new List<Opportunity>(); var customers = await db.Customers.Where(c => c.Categories.Any(cate => model.CustomerCategories.Contains(cate.CategoryId))).ToListAsync(); foreach(var customer in customers) { var opportunityName = string.Empty; if (String.IsNullOrEmpty(model.Name)) { opportunityName = customer.FullName; } else { opportunityName = model.Name; // 补充你之前可能遗漏的赋值逻辑 } var opportunity = new Opportunity { StepId = model.StepId, Name = opportunityName, Email = customer.Email, Phone = customer.Phone, CustomerId = customer.Id, Status = IdentityStatus.Active, ExpectedRevenue = model.ExpectedRevenue, Probability = model.Probability, Notes = model.Note, Deadline = model.Deadline, OwnerId = OwnerId, Reason = model.Reason, Revenue = model.Revenue, CompleteDate = model.CompleteDate, }; newOpportunities.Add(opportunity); // 将实体存入本地列表 db.Opportunities.Add(opportunity); } await db.SaveChangesAsync(); // 提取所有新增商机的ID列表 var newOpportunityIds = newOpportunities.Select(o => o.Id).ToList(); // 这里就可以用newOpportunityIds去做后续的详情查询或其他操作了
关键注意事项
确认主键配置正确:确保你的
Opportunity实体的Id属性是数据库自动生成的,比如通过数据注解或Fluent API配置:- 数据注解方式:
public class Opportunity { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } // 其他属性... } - Fluent API方式:
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Opportunity>() .Property(o => o.Id) .ValueGeneratedOnAdd(); }
- 数据注解方式:
避免额外查询:这种方法不需要在插入后再去数据库查询新增的ID,直接利用EF Core的回填机制,性能更优,也避免了并发场景下的查询错误。
内容的提问来源于stack exchange,提问作者Dat Nguyen
相关产品推荐
相关产品推荐

