Sto usando EF Core con l'approccio database-first usando il comando "Scaffold-DbContext" per generare il mio DbContext / Entities.
Come posso istruire Scaffold-DbContext che un certo campo in una certa tabella dovrebbe generare codice per usare un Enum invece di un solo int?
Questo è il modo in cui lo facevi normalmente con EF: https://www.devu.com/cs-asp/lesson-69-mapping-enum-types-entity-properties-framework-designer/
Questo enum è già definito nel codice:
public enum StateEnum {
Ok = 1,
Fail = 2
}
Questo è ciò che Scaffold-DbContext mi dà
public partial class Foo
{
public int Id { get; set; }
public int State { get; set; }
}
Questo è ciò che voglio creare:
public partial class Foo
{
public int Id { get; set; }
public StateEnum State { get; set; }
}
A partire da Entity Framework Core 2.1 , EF supporta Conversioni valore per indirizzare in modo specifico gli scenari in cui una proprietà deve essere mappata su un tipo diverso per l'archiviazione.
In particolare per Enum, puoi utilizzare EnumToStringConverter
o EnumToNumberConverter
.
Non valuta la conversione in EF Core 2.1 fa ciò che ti serve adesso?
https://docs.microsoft.com/en-us/ef/core/modeling/value-conversions
Esempio veloce:
entity.Property(e => e.MyEnumField)
.HasMaxLength(50)
.HasConversion(
v => v.ToString(),
v => (MyEnum)Enum.Parse(typeof(MyEnum),v))
.IsUnicode(false);