定義 (DbSets を)Defining DbSets

Code First ワークフローを使用して開発する場合は、データベースとのセッションを表す派生 DbContext を定義し、モデルの型ごとに Dbcontext を公開します。When developing with the Code First workflow you define a derived DbContext that represents your session with the database and exposes a DbSet for each type in your model. このトピックでは、DbSet プロパティを定義するさまざまな方法について説明します。This topic covers the various ways you can define the DbSet properties.

DbContext と Dbcontext プロパティDbContext with DbSet properties

Code First 例に示す一般的なケースは、モデルのエンティティ型に対して、パブリックな自動 Dbcontext プロパティを持つ DbContext を使用することです。The common case shown in Code First examples is to have a DbContext with public automatic DbSet properties for the entity types of your model. 次に例を示します。For example:

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

Code First モードで使用すると、ブログや投稿をエンティティ型として構成できるだけでなく、その他の型を構成することができます。When used in Code First mode, this will configure Blogs and Posts as entity types, as well as configuring other types reachable from these. さらに、DbContext は、これらの各プロパティの setter を自動的に呼び出して、適切な Dbcontext のインスタンスを設定します。In addition DbContext will automatically call the setter for each of these properties to set an instance of the appropriate DbSet.

IDbSet プロパティを持つ DbContextDbContext with IDbSet properties

モックの作成時やフェイクの作成時など、インターフェイスを使用して set プロパティを宣言すると便利な場合があります。There are situations, such as when creating mocks or fakes, where it is more useful to declare your set properties using an interface. このような場合は、DbSet の代わりに IDbSet インターフェイスを使用できます。In such cases the IDbSet interface can be used in place of DbSet. 次に例を示します。For example:

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

このコンテキストは、その設定プロパティに DbSet クラスを使用するコンテキストとまったく同じ方法で動作します。This context works in exactly the same way as the context that uses the DbSet class for its set properties.

読み取り専用の設定プロパティを持つ DbContextDbContext with read-only set properties

DbSet または IDbSet プロパティのパブリック setter を公開したくない場合は、代わりに読み取り専用プロパティを作成し、自分で set インスタンスを作成できます。If you do not wish to expose public setters for your DbSet or IDbSet properties you can instead create read-only properties and create the set instances yourself. 次に例を示します。For example:

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

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

DbContext は、Set メソッドから返された Dbcontext のインスタンスをキャッシュして、これらの各プロパティが呼び出されるたびに同じインスタンスを返すようにします。Note that DbContext caches the instance of DbSet returned from the Set method so that each of these properties will return the same instance every time it is called.

Code First のエンティティ型の検出は、パブリックな getter と setter を持つプロパティの場合と同じように動作します。Discovery of entity types for Code First works in the same way here as it does for properties with public getters and setters.