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
相关产品推荐
相关产品推荐

