J'essaie d'exécuter update-database
pour migrer certaines modifications que j'ai apportées à ma base de données.
Tout se passe bien jusqu'à ce que j'obtienne l'erreur suivante:
Aucun constructeur approprié n'a été trouvé pour le type d'entité 'ReportType'. Les constructeurs suivants avaient des paramètres qui ne pouvaient pas être liés aux propriétés du type d'entité: ne peut pas lier 'id', 'nom' dans 'ReportType (id de chaîne, nom de chaîne)'.
Voici le code de 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)
{
}
}
Comme vous pouvez le voir dans la section commentée de ce code, avoir un constructeur sans paramètre résoudrait normalement ce problème pour EF Core, mais SmartEnum n'a pas de base de constructeur sans paramètre.
Il y a eu un commit dans la bibliothèque SmartEnum le 27 Arpil 2018 qui a ajouté un constructeur sans paramètre pour que ce problème n'existe pas, mais cette modification a été supprimée dans un commit ultérieur et je ne sais pas comment procéder sans.
Cet engagement peut être trouvé ici: https://github.com/ardalis/SmartEnum/commit/870012d406609a4a8889fdde2139750dc618d6a9
Et a été supprimé dans ce commit: https://github.com/ardalis/SmartEnum/commit/1c9bf3ede229fcb561330719cd13af67dcf92ad7
Toute aide est grandement appréciée!
ÉDITER:
Voici ma solution à ce problème selon les commentaires d'Ivan:
modelBuilder.Entity<Report>()
.Property(p => p.ReportType)
.HasConversion(
p => p.Value,
p =>ReportType.FromValue(p));
Dans OnModelCreating of ApplicationDbContext.cs:
modelBuilder.Entity<Report>()
.Property(p => p.ReportType)
.HasConversion(
p => p.Value,
p =>ReportType.FromValue(p));