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

EF Fluent API映射忽略子属性时抛出ArgumentException问题求助

解决Entity Framework Core中Fluent API忽略嵌套子属性的异常问题

这个问题我之前也碰到过!你遇到的ArgumentException是因为EF Core的Ignore方法不支持直接传入嵌套属性的表达式——它只认像t => t.MyProperty这种直接的属性访问形式。而你的PaisCompleto和CidadeCompleto是通过OwnsOne配置的拥有类型,要忽略它们的子属性,得在OwnsOne的内部配置块里操作,而不是在根实体的配置上调用Ignore。

正确的配置方式

你需要把忽略子属性的逻辑移到OwnsOne的配置委托中,针对拥有类型的配置器来调用Ignore方法:

public class EnderecoMap : IEntityTypeConfiguration<Endereco> {
    public void Configure(EntityTypeBuilder<Endereco> builder) {
        builder
            .OwnsOne(g => g.PaisCompleto, pais => {
                pais
                    .Property(c => c.Codigo)
                    .HasColumnName("PaisCodigo")
                    .HasColumnType("varchar(5)");
                // 在拥有类型的配置器里忽略Descricao
                pais.Ignore(c => c.Descricao);
            });
        
        builder
            .OwnsOne(g => g.CidadeCompleto, cidade => {
                cidade
                    .Property(c => c.Codigo)
                    .HasColumnName("CidadeCodigo")
                    .HasColumnType("varchar(7)");
                // 同样在这里忽略Descricao
                cidade.Ignore(c => c.Descricao);
            });
    }
}

为什么这样可行?

OwnsOne方法会返回一个针对拥有类型(这里是DtoConceito<string>)的配置器,在这个配置器的上下文里,c => c.Descricao就是一个符合要求的简单属性访问表达式,EF Core可以正确识别并处理忽略逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:33:41