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

在aspnetboilerplate框架子实体中添加数组数据是否可行?

你当前的错误是因为实体类和DTO的一对多关系配置错误,Recepie侧的关联属性定义为了单个Ingrident对象,无法接收数组输入,按以下步骤调整即可:

1 修正Recepie实体的关联属性

将Recepie.cs里的Ingridents属性从单个对象改为集合类型,匹配一对多的业务关系:

public class Recepie : Entity
{
    public string RecepieName { get; set; }
    // 改为List集合承载多个Ingrident,同时初始化避免空引用异常
    public List<Ingrident> Ingridents { get; set; } = new List<Ingrident>();
}
2 修正RecepieDto的关联属性

同步修改DTO结构,匹配实体的集合类型,支持接收数组参数:

[AutoMap(typeof(IndexIngrident.Entities.Recepie))]
public class RecepieDto : EntityDto
{
    public string RecepieName { get; set; }
    // 改为集合类型接收前端传入的Ingredient数组
    public List<IngridentRecepieDto> Ingridents { get; set; }
}

public class IngridentRecepieDto : EntityDto
{
    public string Name { get; set; }
    // 新增Recepie时主实体Id还未生成,改为可空类型避免参数校验错误
    public int? RecepieId { get; set; }
}
3 显式配置EF Core实体关系(可选,避免自动映射异常)

在项目的DbContext类OnModelCreating方法中添加显式的一对多关系配置,避免EF自动识别关系出错:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    
    modelBuilder.Entity<Recepie>()
        .HasMany(r => r.Ingridents)
        .WithOne(i => i.Recepie)
        .HasForeignKey(i => i.RecepieId)
        .OnDelete(DeleteBehavior.Cascade); // 可按需调整级联删除规则
}
4 重写CreateAsync方法支持子实体批量插入

默认的AsyncCrudAppService不会自动处理子实体的持久化,需要重写创建方法手动保存关联的Ingredient:

public override async Task<RecepieDto> CreateAsync(RecepieDto input)
{
    // 先保存主实体获取生成的Id
    var recepie = ObjectMapper.Map<Recepie>(input);
    var recepieId = await _repository.InsertAndGetIdAsync(recepie);
    await CurrentUnitOfWork.SaveChangesAsync();

    // 批量插入关联的Ingredient实体
    foreach (var ingDto in input.Ingridents)
    {
        ingDto.RecepieId = recepieId;
        var ingEntity = ObjectMapper.Map<Ingrident>(ingDto);
        await _ingRepository.InsertAsync(ingEntity);
    }

    // 返回完整的映射结果
    recepie = await _repository.GetAsync(recepieId);
    return ObjectMapper.Map<RecepieDto>(recepie);
}

调整完成后即可正常传入Ingredient数组完成批量关联添加。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:18:03