System.InvalidOperationException: La propiedad ‘x.y’ es de tipo ‘x’ que no es compatible con el proveedor de base de datos actual.
Utilicé validaciones de anotaciones de datos antes, ahora quiero cambiar a Fluent Validation.
Esto se debe a que ahora cambiamos el proyecto a arquitectura limpia.
Cuando envío los datos desde Postman, la solicitud genera una excepción.
System.InvalidOperationException: La propiedad ‘X.Overview’ es de tipo ‘XOverview’, que no es compatible con el proveedor de base de datos actual. Cambie el tipo CLR de la propiedad o ignore la propiedad usando el atributo ‘[NotMapped]’ o utilizando ‘EntityTypeBuilder.Ignore’ en ‘OnModelCreating’.
al utilizar validaciones de anotaciones de datos
Dominio X.cs
public class X
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
public XOverview Overview { get; set; }
}
public class XOverview
{
[Required]
public int Id { get; set; }
[Required]
public string Content { get; set; }
}
en DbConext.cs
public DbSet<xoverview> XOverview { get; set; }
// se ha eliminado el resto
El código anterior funciona bien.
Ahora quiero cambiar a Fluent Validation.
al utilizar fluent validation
Dominio X.cs
public class X
{
public XOverview Overview { get; set; }
}
public class XOverview
{
public int Id { get; set; }
public string Content { get; set; }
}
// Validación fluida para X
public class XConfiguration : IEntityTypeConfiguration<x>
{
public void Configure(EntityTypeBuilder<x> builder)
{
builder.HasKey(i => i.Id);
builder.Property(i => i.Overview)
.IsRequired();
}
}
public class XOverviewConfiguration : IEntityTypeConfiguration<xoverview>
{
public void Configure(EntityTypeBuilder<xoverview> builder)
{
builder.Property(i => i.Id)
.IsRequired();
builder.Property(i => i.Content)
.IsRequired();
}
}
¿Cuál es el error que cometí al cambiar a la validación fluida?
Por favor, ayúdame a encontrar el problema.
davy.ai
El problema está con
builder.Property(i => i.Overview)
en la clase XConfiguration. Dado que Overview es un objeto, no podemos mapearlo directamente a una columna de la base de datos.Para solucionar este problema, debemos utilizar el método
OwnsOne
deEntityTypeBuilder
en la clase XConfiguration para mapear las propiedades del objeto Overview:Esto mapeará las propiedades de Overview a las respectivas columnas en la base de datos.