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

已定义键仍遇‘实体类型需定义主键’错误,批量添加Pick求助

解决方案

你的问题核心是把PickList当成了EF Core的实体类来操作,但它本质只是用来批量传递Pick数据的容器(DTO),不需要映射到数据库表,也不需要作为实体被EF跟踪。

修改步骤:

  1. 调整DbContext
    移除针对PickList的DbSet,只保留Pick的DbSet:
public class DataContext : DbContext
{
    // 保留Pick的DbSet,移除PickList的Selections
    public DbSet<Pick>? Picks { get; set; }

    // 其他上下文配置...
}
  1. 简化PickList类
    去掉无效的[Key]属性,它只是用来接收批量数据的载体:
public class PickList
{
    public List<Pick>? Picks { get; set; }
}
  1. 修改API接口逻辑
    直接将PickList中的Picks集合批量添加到数据库,而不是添加PickList本身:
app.MapPost(
    "/selections", async (PickList pickList, DataContext db) => {
        if (pickList.Picks != null && pickList.Picks.Count > 0)
        {
            db.Picks?.AddRange(pickList.Picks);
            await db.SaveChangesAsync();
        }
        return Results.Ok();
    }
);

错误原因说明:

  • 最初报错是因为EF Core要求所有实体必须有合法主键,你用List<Pick>作为PickList的主键完全不符合EF的主键规则。
  • 设为无键实体后报错,是因为EF Core不允许跟踪无键实体(Add操作需要跟踪实体状态),而你根本不需要把PickList存入数据库,只需要操作里面的Pick集合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 13:09:27