Implementacja podejścia Code First

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.
Screenshot_1

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.

Screenshot_2

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

VosmF

 

Leave a Reply

Your email address will not be published. Required fields are marked *