DbSet の定義

Code First ワークフローを使用して開発する場合、データベースとのセッションを表し、モデル内の型ごとに DbSet を公開する派生 DbContext を定義します。 このトピックでは、DbSet プロパティを定義するさまざまな方法について説明します。

DbSet プロパティを使用する DbContext

Code First の例で示されている一般的なケースでは、DbContext で、モデルのエンティティ型のパブリック自動 DbSet プロパティを使用しています。 次に例を示します。

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }
}

これを Code First モードで使用すると、Blogs と Posts がエンティティ型として構成され、これらから到達可能な他の型も構成されます。 さらに、DbContext は、これらの各プロパティのセッターを自動的に呼び出して、適切な DbSet のインスタンスを設定します。

IDbSet プロパティを使用する DbContext

モックやフェイクを作成する場合など、インターフェイスを使用して set プロパティを宣言する方が便利な場合があります。 このような場合は、DbSet の代わりに IDbSet インターフェイスを使用できます。 次に例を示します。

public class BloggingContext : DbContext
{
    public IDbSet<Blog> Blogs { get; set; }
    public IDbSet<Post> Posts { get; set; }
}

このコンテキストは、set プロパティに DbSet クラスを使用するコンテキストとまったく同様に機能します。

読み取り専用の set プロパティを使用する DbContext

DbSet または IDbSet プロパティのパブリック セッターを公開したくない場合は、代わりに読み取り専用プロパティを作成し、自分で set インスタンスを作成できます。 次に例を示します。

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs
    {
        get { return Set<Blog>(); }
    }

    public DbSet<Post> Posts
    {
        get { return Set<Post>(); }
    }
}

DbContext は、Set メソッドから返された DbSet のインスタンスをキャッシュするので、これらの各プロパティは、呼び出されるたびに同じインスタンスを返します。

Code First のエンティティ型の検出は、パブリック ゲッターおよびセッターを使用するプロパティの場合と同様に機能します。