Compartir vía


Definición de DbSets

Al desarrollar con el flujo de trabajo Code First, se define un DbContext derivado que representa la sesión con la base de datos y expone un DbSet para cada tipo del modelo. En este tema se describen las distintas formas de definir las propiedades de DbSet.

DbContext con propiedades DbSet

El caso común que se muestra en los ejemplos de Code First es tener DbContext con propiedades DbSet automáticas públicas para los tipos de entidad del modelo. Por ejemplo:

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

Cuando se usa en el modo Code First, esto configurará blogs y publicaciones como tipos de entidad, así como configurar otros tipos accesibles desde estos. Además, DbContext llamará automáticamente al establecedor para cada una de estas propiedades para establecer una instancia del DbSet adecuada.

DbContext con propiedades IDbSet

Hay situaciones, como al crear simulacros o emulaciones, donde resulta más útil declarar las propiedades del conjunto mediante una interfaz. En tales casos, la interfaz IDbSet se puede usar en lugar de DbSet. Por ejemplo:

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

Este contexto funciona exactamente de la misma manera que el contexto que usa la clase DbSet para sus propiedades de conjunto.

DbContext con propiedades de conjunto de solo lectura

Si no desea exponer establecedores públicos para las propiedades DbSet o IDbSet, puede crear propiedades de solo lectura y crear las instancias del conjunto usted mismo. Por ejemplo:

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

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

Tenga en cuenta que DbContext almacena en caché la instancia de DbSet devuelta desde el método Set para que cada una de estas propiedades devuelva la misma instancia cada vez que se llame a ella.

La detección de tipos de entidad para Code First funciona de la misma manera que para las propiedades con captadores y establecedores públicos.