Partager via


Définition de DbSets

Lorsque vous développez avec le workflow Code First, vous définissez un DbContext dérivé qui représente votre session avec la base de données et expose un DbSet pour chaque type dans votre modèle. Cette rubrique décrit les différentes méthodes pour définir les propriétés de DbSet.

DbContext avec des propriétés DbSet

Le cas courant présenté dans les exemples Code First consiste à avoir un DbContext avec des propriétés DbSet automatiques publiques pour les types d’entités de votre modèle. Par exemple :

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

Lorsqu’il est utilisé en mode Code First, DbContext configure les blogs et les publications en tant que types d’entités, et configure également d’autres types accessibles à partir de ceux-ci. En outre, DbContext appelle automatiquement la méthode setter pour chacune de ces propriétés pour définir une instance du DbSet approprié.

DbContext avec des propriétés IDbSet

Il existe des situations, comme lors de la création d’objets fictifs ou de fakes, où il est plus utile de déclarer les propriétés de vos jeux à l’aide d’une interface. Dans ce cas, l’interface IDbSet peut être utilisée à la place de DbSet. Par exemple :

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

Ce contexte fonctionne exactement de la même façon que celui qui utilise la classe DbSet pour les propriétés de son jeu.

DbContext avec des propriétés de jeu en lecture seule

Si vous ne souhaitez pas exposer de méthodes setter publiques pour vos propriétés DbSet ou IDbSet, vous pouvez créer des propriétés en lecture seule et créer vous-même les instances du jeu. Par exemple :

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

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

Notez que DbContext met en cache l’instance de DbSet renvoyée à partir de la méthode Set, de sorte que chacune de ces propriétés renvoie la même instance chaque fois qu’elle est appelée.

La détection de types d’entités pour Code First fonctionne ici de la même façon que pour les propriétés avec des méthodes getter et setter publiques.