Code First Entity Framework - .NET Framework

Overview

This article walks through getting started with a Code First Entity Framework solution.

Walkthrough

STEP 1: Install EntityFramework package


STEP 2: Create DbContext-based class

A DbContext-based class is a class that inherits from System.Data.Entity.DbContext.

using System.Data.Entity;

namespace NerdDinner.Domain
{
    public class SiteDb : DbContext
    {
        public DbSet<Dinner> Dinners { get; set; }
        public DbSet<RSVP> RSVPs { get; set; }
    }
}

STEP 3: Create connection string

In web.config, create a connection string NAMED THE SAME as the DbContext-based class

<connectionStrings>
  <add name="SiteDb"
       connectionString="Data Source=.;Initial Catalog=NerdDinners;Integrated Security=SSPI;" 
       providerName="System.Data.SqlClient"
       />
</connectionStrings>

STEP 4: Setup Database Sync

To have the database be recreated when the model changes, add one of the following two blocks to Application_Start() in Global.asax.cs.

if (System.Diagnostics.Debugger.IsAttached)
    Database.SetInitializer<SiteDb>(new DropCreateDatabaseIfModelChanges<SiteDb>());

if (System.Diagnostics.Debugger.IsAttached)
    Database.SetInitializer<SiteDb>(new SiteDbInitializer());

Alternatively, you could set this up in the web.config file, like this.

<configuration>
  . . .
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <contexts>
      <context type="CompanyName.ProjectName.Data.MyDomain, CompanyName.ProjectName.Data">
        <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[CompanyName.ProjectName.Data.MyDomain, CompanyName.ProjectName.Data], [CompanyName.ProjectName.Data.Migrations.Configuration, CompanyName.ProjectName.Data]], EntityFramework" />
      </context>
    </contexts>
  </entityFramework>
  . . .
</configuration>

The SiteDbInitializer class might have code like the following.

using System.Data.Entity;
. . .
public class SiteDbInitializer : DropCreateDatabaseIfModelChanges<SiteDb>
{
    protected override void Seed(SiteDb context)
    {
        var dinners = new List<Dinner>
        {
            new Dinner
            {
                Title = "Sample Dinner 1",
                EventDate = new DateTime(2012,12,31),
                Address = "One Microsoft Way",
                Country = "USA",
                HostedBy = "scottgu@microsoft.com"
            },
            new Dinner
            {
                Title = "Sample Dinner 2",
                EventDate = new DateTime(2013,5,31),
                Address = "Somewhere Else",
                Country = "USA",
                HostedBy = "scottgu@microsoft.com"
            }
        };
        dinners.ForEach(d => context.Dinners.Add(d));
    }
}

Conventions

To remove the pluralizing of table names, include the following code within your DbContext-based class.

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}

Package Manager Commands