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

EF Core插入报错:不支持System.Action实例的序列化与反序列化

问题解析与解决方案

报错原因

Serialization and deserialization of 'System.Action' instances are not supported. Path: $.MoveNextAction 这个错误的核心是序列化器尝试处理包含无法序列化的System.Action的对象,通常是EF Core延迟加载代理中的延迟加载委托,或是异步方法状态机被意外纳入序列化流程。结合你的代码场景,大概率是被EF跟踪的实体(或其代理对象)在映射为DTO后,被JSON序列化器处理时触发了延迟加载逻辑,导致代理中的Action被尝试序列化。


解决方案

1. 检查并调整DTO与AutoMapper配置

查看CampaignDetialDto是否包含UserCampaigns这类无需返回的导航属性:

  • 如果不需要该属性,直接从DTO中移除;
  • 如果必须保留,在AutoMapper配置中显式忽略实体的导航属性,避免映射EF跟踪的集合:
// AutoMapper配置示例
CreateMap<Campaign, CampaignDetialDto>()
    .ForMember(dest => dest.UserCampaigns, opt => opt.Ignore());

2. 分离EF上下文跟踪的实体

在仓储的AddAsync方法中,保存数据后将实体从EF上下文的跟踪状态中分离,避免返回的实体携带包含Action的EF代理对象:

public async Task<T> AddAsync(T entity)
{
    await _context.AddAsync(entity);
    await _context.SaveChangesAsync();
    
    // 分离主实体
    _context.Entry(entity).State = EntityState.Detached;
    
    // 分离关联的Campaign实体(如果需要)
    if (entity is UserCampaign userCampaign)
    {
        _context.Entry(userCampaign.Campaign).State = EntityState.Detached;
    }
    
    return entity;
}

3. 禁用EF Core延迟加载

如果你的业务场景不需要延迟加载,在上下文注册时明确禁用,避免生成包含Action的代理对象:

public static IServiceCollection AddApplicationPostGresContext(this IServiceCollection services, IConfiguration _config)
{
    services.AddDbContext<PostGresContext>(options =>
    {
        options.UseNpgsql(_config.GetConnectionString("PostGresConnectionString"))
               .UseLazyLoadingProxies(false); // 禁用延迟加载代理
    });

    return services;
}

4. 规范实体初始化逻辑(可选)

将Campaign类的字段级初始化改为构造函数初始化,避免可能的初始化逻辑干扰(非直接报错原因,但可提升代码规范性):

public class Campaign
{
    public Campaign()
    {
        Name = string.Empty;
        Description = string.Empty;
        CreateDate = DateTime.UtcNow;
        Active = ActiveStateEnum.Active;
    }
    
    // 其他属性...
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:35:16