I get the following exception when I try to map an enum to smallint in OnModelCreating:
InvalidCastException: Unable to cast object of type 'System.Byte' to type 'System.Int32'.
I want to do this because in SQL Server an int is 4 bytes while a tinyint is 1 byte.
Relevant code: Entity:
namespace SOMapping.Data { public class Tag { public int Id { get; set; } public TagType TagType { get; set; } } public enum TagType { Foo, Bar } } DbContext:
using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; namespace SOMapping.Data { public class ApplicationDbContext : IdentityDbContext { public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } public DbSet<Tag> Tags { get; set; } protected override void OnModelCreating(ModelBuilder builder) { builder.Entity<Tag>().Property(m => m.TagType).HasColumnType("smallint"); base.OnModelCreating(builder); } } } Query:
using System.Linq; using Microsoft.AspNetCore.Mvc; using SOMapping.Data; namespace SOMapping.Controllers { public class HomeController : Controller { private ApplicationDbContext _applicationDbContext; public HomeController(ApplicationDbContext applicationDbContext) { _applicationDbContext = applicationDbContext; } public IActionResult Index() { var tags = _applicationDbContext.Tags.ToArray(); return View(); } } } Is there a way I can make this work so that I don't have to use 4 times as much space with all my enums?