You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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去做后续的详情查询或其他操作了

关键注意事项

  1. 确认主键配置正确:确保你的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();
      }
      
  2. 避免额外查询:这种方法不需要在插入后再去数据库查询新增的ID,直接利用EF Core的回填机制,性能更优,也避免了并发场景下的查询错误。

内容的提问来源于stack exchange,提问作者Dat Nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:51:59