Определение Дбсетс

при разработке с помощью Code First рабочего процесса определяется производный DbContext, который представляет сеанс с базой данных и предоставляет DbSet для каждого типа в модели. В этом разделе рассматриваются различные способы определения свойств DbSet.

DbContext со свойствами DbSet

типичный случай, показанный в Code First примерах, — наличие DbContext с общедоступными свойствами DbSet для типов сущностей вашей модели. Пример:

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

при использовании в Code Firstном режиме это позволит настроить блоги и записи в качестве типов сущностей, а также настроить другие типы, доступные из них. Кроме того, DbContext автоматически вызывает метод задания для каждого из этих свойств, чтобы задать экземпляр соответствующего DbSet.

DbContext со свойствами Идбсет

Существуют ситуации, например при создании макетов или поддельных ситуаций, где более удобно объявлять свойства набора с помощью интерфейса. В таких случаях вместо DbSet можно использовать интерфейс Идбсет. Пример:

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

Этот контекст работает точно так же, как контекст, использующий класс DbSet для своих свойств Set.

DbContext с заданными свойствами только для чтения

Если вы не хотите предоставлять общедоступные методы задания для свойств DbSet или Идбсет, вы можете создать свойства только для чтения и самостоятельно создать экземпляры набора. Пример:

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

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

Обратите внимание, что DbContext кэширует экземпляр DbSet, возвращенный методом set, чтобы каждое из этих свойств возвращало один и тот же экземпляр при каждом вызове.

обнаружение типов сущностей для Code First работает таким же образом, как и для свойств с открытыми методами получения и заданиями.