Estoy intentando ejecutar update-database
para migrar algunos cambios que hice a mi update-database
.
Todo va bien hasta que obtengo el siguiente error:
No se encontró un constructor adecuado para el tipo de entidad 'ReportType'. Los siguientes constructores tenían parámetros que no podían vincularse a las propiedades del tipo de entidad: no se puede vincular 'id', 'name' en 'ReportType (id de cadena, nombre de cadena)'.
Aquí está el código para ReportType.cs:
public class ReportType : SmartEnum<ReportType, string>
{
public static readonly ReportType ReportType1 = new ReportType("Blah", "Blah");
public static readonly ReportType ReportType2 = new ReportType("Blah", "Blah");
public static readonly ReportType ReportType3 = new ReportType("Blah", "Blah");
// required for EF, but breaking for SmartEnum
// private ReportType() {}
private ReportType(string id, string name) : base(name, id)
{
}
}
Como puede ver en la sección comentada de ese código, tener un constructor sin parámetros normalmente solucionaría este problema para EF Core, pero SmartEnum no tiene una base de constructor sin parámetros.
Hubo un compromiso con la biblioteca SmartEnum el 27 de Arpil de 2018 que agregó un constructor sin parámetros para que este problema no existiera, pero ese cambio se eliminó en un compromiso posterior y no estoy seguro de cómo proceder sin él.
Esa confirmación se puede encontrar aquí: https://github.com/ardalis/SmartEnum/commit/870012d406609a4a8889fdde2139750dc618d6a9
Y se eliminó en esta confirmación: https://github.com/ardalis/SmartEnum/commit/1c9bf3ede229fcb561330719cd13af67dcf92ad7
¡Cualquier ayuda es muy apreciada!
EDITAR:
Aquí está mi solución a este problema según los comentarios de Ivan:
modelBuilder.Entity<Report>()
.Property(p => p.ReportType)
.HasConversion(
p => p.Value,
p =>ReportType.FromValue(p));
En OnModelCreating de ApplicationDbContext.cs:
modelBuilder.Entity<Report>()
.Property(p => p.ReportType)
.HasConversion(
p => p.Value,
p =>ReportType.FromValue(p));