Enum Support (Code First) in Entity Framework 5

Entity Framework 5 brings a number of improvements and Enum Support in Code First is one of them.

In this article, I'll follow the simple steps to develop a console app with Entity Framework Code First.

Step 1. Create a New Project

Create a new console application File > New > Project > Visual C# > Console Application.

Step 2. EF5 from NuGet

At the very first, we need to enable Entity Framework 5 for this console project from the NuGet Package Manager. For this, in "Solution Explorer" right-click on the project click on "Manage NuGet Packages" and install Entity Framework 5.

Framework

The DbContext and DbSet types are defined in the EntityFramework assembly; that's why I added a reference to this DLL using the EntityFramework NuGet package. Note, that in addition to the EntityFramework assembly, references to System.ComponentModel.DataAnnotations and System.Data. Entity assemblies are automatically added to the project as well.

Step 3. Create a Model

Now, time to define a new model using the Code First Approach.

public enum Courses
{
    BCA, MCA, BTECH, MTECH
}

public partial class Students
{
    public int ID { get; set; }
    public string Name { get; set; }
    public Courses Course { get; set; }
}

Please note, that the preceding code defines an "enum" by the name "Courses". By default, the enumeration is of int type. The "Course" property on the "Students" class is of the "Courses" enumeration type. Remember, in EF5 enumeration can have the following underlying types: Byte, Int16, Int32, Int64, or SByte.

Step 4. Create DbContext

Now, go ahead and define the DbContext.

public partial class StudentContext : DbContext
{
    public DbSet<Students> Student { get; set; }
}

Note to use a namespace "using System.Data.Entity;" on the top.

Step 5. Data Handling

Now, we are all set to retrieve data and for this, we need some code in the Main() method; see.

static void Main(string[] args)
{
    using (var context = new StudentContext())
    {
        context.Student.Add(new Students { Name = "Abhimanyu", Course = Courses.MTECH });
        context.SaveChanges();

        var stdQuery = (from d in context.Student
                        where d.Course == Courses.MTECH
                        select d).FirstOrDefault();

        Console.WriteLine("StudentID: {0} Name: {1}", stdQuery.ID, stdQuery.Name);
    }
}

Now, the brand new Enum support allows you to have enum properties in your entity classes; see

 Enum properties

Step 6. Complete Code

Find the complete code of my console application as the following.

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication3
{
    public enum Courses
    {
        BCA, MCA, BTECH, MTECH
    }

    public partial class Students
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public Courses Course { get; set; }
    }

    public partial class StudentContext : DbContext
    {
        public DbSet<Students> Student { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            using (var context = new StudentContext())
            {
                context.Student.Add(new Students { Name = "Abhimanyu", Course = Courses.MTECH });
                context.SaveChanges();

                var stdQuery = (from d in context.Student
                                where d.Course == Courses.MTECH
                                select d).FirstOrDefault();

                Console.WriteLine("StudentID: {0} Name: {1}", stdQuery.ID, stdQuery.Name);
            }
        }
    }
}

Step 7. Find Database

When you run the application the first time, the Entity Framework creates a database for you. Because we have Visual Studio 2012 installed, the database will be created on the LocalDB instance. By default, the Entity Framework names the database after the fully qualified name of the derived context (for this example that is ConsoleApplication3.StudentContext).

Database

Note, that if you make any changes to your model after the database has been created, you should use Code First Migrations to update the database schema, watch this.

I hope you like it. Thanks.