Jasinski Technical Wiki


Home Page
All Pages

Quick Search
Advanced Search »

Contributor Links

Create a new Page
File Management
Your Profile

Other Wiki Sections



Extension Method to Seed Enum Values into Database Table - Entity Framework Code First

Modified on Fri, Aug 18, 2017, 10:43 AM by Administrator Categorized as Entity Framework Code First


The AddSpaces extension method can be found here.

Reusable Code

Add this code within your DAL project/namespace.

public abstract class EnumDbEntity<TEnum>
    public TEnum Id { get; set; }

    [Required, StringLength(100)]
    public string Value { get; set; }


public static class EnumDbEntityExtensions
    public static void SeedEnumTable<TEnum, TEntity>(this IDbSet<TEntity> dbSet)
        where TEnum : struct, IConvertible
        where TEntity : EnumDbEntity<TEnum>, new()
        if (!typeof(TEnum).IsEnum) throw new ArgumentException("TEnum must be an enumerated type");

        var itemValues = (TEnum[])Enum.GetValues(typeof(TEnum));

        foreach (var itemValue in itemValues)
            dbSet.AddOrUpdate(a => a.Id, new TEntity { Id = itemValue, Value = EnumHelper<TEnum>.GetDisplayValue(itemValue) });


/* Reference
    * https://stackoverflow.com/questions/13099834/how-to-get-the-display-name-attribute-of-an-enum-member-via-mvc-razor-code */
public static class EnumHelper<T>
    where T : struct, IConvertible

    public static string GetDisplayValue(T value)
        var fieldInfo = value.GetType().GetField(value.ToString());

        var descriptionAttributes = fieldInfo.GetCustomAttributes(
            typeof(DisplayAttribute), false) as DisplayAttribute[];

        //if (descriptionAttributes[0].ResourceType != null)
        //    return lookupResource(descriptionAttributes[0].ResourceType, descriptionAttributes[0].Name);

        if (descriptionAttributes == null) return string.Empty;
        return (descriptionAttributes.Length > 0) ? descriptionAttributes[0].Name : value.ToString().AddSpaces();

Implementation Sample Code

Enum and Database Entity

public enum OrderStatusEnum

public class OrderStatus : EnumDbEntity<OrderStatusEnum>
{ }

Seeding the Table

context.OrderStatuses.SeedEnumTable<OrderStatusEnum, OrderStatus>();

ScrewTurn Wiki version Some of the icons created by FamFamFam. Except where noted, all contents Copyright © 1999-2020, Patrick Jasinski.