When defining which subpropriety in the EF mapping via Fluent API should be ignored, a Argumentexception is launched

Asked

Viewed 30 times

1

I created a map on Entity Framework via Fluent API, however when defining that a subpropriety should be ignored the exception is thrown below:

System.Argumentexception: 'The Expression 'x => x.PaisCompleto.Description' is not a Valid Property Expression. The Expression should represent a simple Property access: ’t => t. Myproperty'.'

Mapping

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>, IDesignTimeDbContextFactory<ApplicationDbContext>
{
    protected override void OnModelCreating(ModelBuilder builder)
    {
        builder.ApplyConfiguration(new EnderecoMap());
    }
}

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)");
            });
        builder.Ignore(x => x.PaisCompleto.Descricao);// Lança exceção

        builder
            .OwnsOne(g => g.CidadeCompleto, cidade => {

                cidade
                    .Property(c => c.Codigo)
                    .HasColumnName("CidadeCodigo")
                    .HasColumnType("varchar(7)");
            });
        builder.Ignore(x => x.CidadeCompleto.Descricao);// Lança exceção
    }    
}

Mapped Entities

public abstract class Endereco
{
    public DtoConceito<string> CidadeCompleto { get; set; }
    public string CEP { get; set; }
}

public class DtoConceito<T>
{    
    public T Codigo { get; set; }
    public string Descricao { get; set; }
}

1 answer

2


Unable to ignore subproprides in Entity Framework.

The correct way to ignore it would be in mapping the country entity.

Following example:

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)");

                pais.Ignore(c => c.Descricao);
            });

        builder
            .OwnsOne(g => g.CidadeCompleto, cidade => {

                cidade
                    .Property(c => c.Codigo)
                    .HasColumnName("CidadeCodigo")
                    .HasColumnType("varchar(7)");

                cidade.Ignore(c => c.Descricao);
            });
    }    
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.