I have a code sample.
- Class project
- Console project
- T4 template, not part of the question but is useful for new enum members stored in a database
Model
public partial class Book
{
public int BookId { get; set; }
public string Title { get; set; }
public int BookCategory { get; set; }
}
BookCategory
public enum BookCategory
{
SpaceTravel = 1,
Adventure = 2,
Romance = 3,
Sports = 4,
Automobile = 5
}
HasConversion
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.HasAnnotation("Relational:Collation", "SQL_Latin1_General_CP1_CI_AS");
// Value converter for enum
modelBuilder
.Entity<Book>()
.Property(e => e.BookCategory)
.HasConversion(item => item,
item => (int)Enum.Parse(typeof(BookCategory),
item.ToString()));
modelBuilder.HasSequence<int>("seq_test").HasMin(1);
OnModelCreatingPartial(modelBuilder);
}
Console app
namespace EntityFrameworkEnumSimpleApp
{
class Program
{
static void Main(string[] args)
{
using (var context = new BookContext())
{
AddRecords(context);
ShowRecords(context);
}
Console.ReadLine();
}
private static void ShowRecords(BookContext context)
{
var table = new Table()
.RoundedBorder()
.AddColumn("[b]Id[/]")
.AddColumn("[b]Title[/]")
.AddColumn("[b]Category[/]")
.Alignment(Justify.Center)
.BorderColor(Color.LightSlateGrey)
.Title("[yellow]Books[/]");
var books = context.Book.ToList();
foreach (var book in books)
{
table.AddRow(book.BookId.ToString(), book.Title, Enum.GetName(typeof(BookCategory), book.BookCategory)!);
}
AnsiConsole.Write(table);
}
private static void AddRecords(BookContext context)
{
if (context.Book.ToList().Count == 0)
{
List<Book> list = new()
{
new() { BookCategory = 5, Title = "First book" },
new() { BookCategory = 3, Title = "Second book" },
new() { BookCategory = 1, Title = "Third book" }
};
context.AddRange(list);
Console.WriteLine($"Books saved {context.SaveChanges()}");
}
}
[ModuleInitializer]
public static void Init()
{
Console.Title = $"EF Core enums simple";
}
}
}
Results