Entity Framework posiada trzy podejścia tworzenia i dołączanie bazy danych Code First, Model First i Database First. W tym wpisie poświęcę czas opisowi i implementacji pierwszemu z nich. W Code First w pierwszej kolejności powinniśmy napisać klasę odpowiadającą polom tabeli, a następnie za pomocą migration możemy stworzyć tabelę.
Ttworzymy prostą klasę reprezentującą pola z tabeli “Blog”.
public class Blog
{
[Key]
public int BlogID { get; set; }
public string Name { get; set; }
public virtual List Posts { get; set; }
}
Czwarta linijka kodu przedstawia EF – to znaczy, że dana propercja będzie kluczem głównym w tabeli.
Piąta i szósta linia odpowiadają nazwom i typom pól tworzonych.
W ósmej linijce przekazujemy do Entity informację, że blog może posiadać wiele postów z tabeli “Post”. Relacja jeden do wielu.
Klasa odpowiadająca postom:
public class Post
{
[Key]
public int PostId { get; set; }
public string Title { get; set; }
public int BlogId { get; set; }
public virtual Blog Blog { get; set; }
}
Analogicznie co do klasy “Blog” – jedyną różnicą jest informacja, że 8 linijka odpowiada że jednemu przypisanemu blogowi może odpowiadać jeden post.
Ostatnia klasa określająca DbContext to znaczy: możliwość odwołania się do danych tabel.
public class BlogContext : DbContext
{
public DbSet Blogs { get; set; }
public DbSet Posts { get; set; }
}
Otwieramy Package Manager Console (Tools=>NuGet Package Manager=>Package Manager Console) w celu uruchomienia migracji.

Wpisujemy “Enable-Migrations” – tworzymy migracje i klase configuration.cs. Następnie dodajemy migracje komendą: “Add-Migration” – zabieg ten dodaje migracje w oparciu o zmiany wprowadzone do naszego modelu i tworzy klasę posiadającą dwie nadpisujące metody Up() – zawiera informacje co będzie zmieniane przy uruchomieniu aktualizacji, a Down() cofa zmiany. U mnie wygląda to następująco:
public override void Up()
{
CreateTable(
"dbo.Blogs",
c => new
{
BlogID = c.Int(nullable: false, identity: true),
Name = c.String(),
})
.PrimaryKey(t => t.BlogID);
CreateTable(
"dbo.Posts",
c => new
{
PostId = c.Int(nullable: false, identity: true),
Title = c.String(),
BlogId = c.Int(nullable: false),
})
.PrimaryKey(t => t.PostId)
.ForeignKey("dbo.Blogs", t => t.BlogId, cascadeDelete: true)
.Index(t => t.BlogId);
}
public override void Down()
{
DropForeignKey("dbo.Posts", "BlogId", "dbo.Blogs");
DropIndex("dbo.Posts", new[] { "BlogId" });
DropTable("dbo.Posts");
DropTable("dbo.Blogs");
}
Wywołanie metody “Update-Database” utworzy nam bazę danych wraz z naszymi tabelami.

Kiedy stosujemy jakie podejście najlepiej obrazuje poniższy obrazek.
