次の方法で共有


DbSet の定義

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

DbSet プロパティを持つ DbContext

Code First の例に示されている一般的なケースは、モデルのエンティティ型に対して公開自動 DbSet プロパティを持つ DbContext を持つことです。 例えば次が挙げられます。

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

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

IDbSet プロパティを持つ DbContext

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

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

このコンテキストは、セット プロパティに DbSet クラスを使用するコンテキストとまったく同じように動作します。

読み取り専用セット プロパティを持つ DbContext

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

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 のエンティティ型の検出は、パブリック ゲッターとセッターを含むプロパティの場合と同じように機能します。