Требуется ли DBSet для прямого доступа?

Я почти уверен, что уже знаю ответ, но мне нужно, чтобы его подтвердили другие. Вопрос касается использования DbSet в Entity Framework: Code First. (с использованием С#)

Давайте использовать эти небольшие классы в качестве примера:

class TopClass
{
    Public List<ExampleA> ListOne {get; set;}
    Public List<ExampleB> ListTwo {get; set;}

    //Other contents ...
}

class ExampleA
{
    Public List<ExampleC> ListTree {get; set;}

    //Other contents ...
}

class ExampleB
{
    //Contents ...
}

class ExampleC
{
    //Contents ...
}

Итак, в TopClass есть списки классов с именами ExampleA и ExampleB, а в ExampleA есть список ExampleC.

Класс, наследуемый от DbContext, может быть таким:

class ExampleContext : DbContext
{
    public DbSet<TopClass> TopClasses {get; set}

    //Other contents..
}

Короче говоря, для TopClass есть только DbSet. Объекты TopClasses могут быть сохранены в базу данных, а также объекты ExampleA, ExampleB и ExampleC, внесенные в списки объектов TopClass/ExampleA-object, также будут сохранены в базу данных. Если я загружу объект TopClass из базы данных, то все остальные объекты, которые были в списках, также будут загружены. Другими словами, у меня есть доступ к другим объектам, которые были сохранены в базе данных через объект TopClass.

Теперь есть вопрос, который я обсуждал с моим коллегой:
Если я хочу получить прямой доступ к объектам ExampleA, без необходимости загружать объект TopClass и все другие связанные объекты (а также без использования SQL-кодирования или лямбда-выражение), нужен ли мне DbSet для ExampleA? Или можно уменьшить нагрузку от DbSet, чтобы включать только те объекты, которые мне нужны? Если да, возможно ли загрузить объект ExampleA без загрузки TopClass?

Я предполагаю, что некоторые ответы очевидны. Я лично считаю, что нужно иметь DbSet для прямого доступа к объектам этого класса в базе данных без необходимости загружать объект TopClass. Однако мне нужно знать, а не верить, поэтому я прошу вас подтвердить или опровергнуть (?) мою веру. Что касается того, что я до сих пор читал в Интернете и кое-что в литературе, то использование DbSet для нескольких классов подчеркивает для меня эффективное кодирование, а не то, что возможно и что невозможно.


person Darth_Sygnious    schedule 08.03.2013    source источник


Ответы (1)


Предположим, что существует следующий код:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Configurations.Add(new TopClassMap());
    modelBuilder.Configurations.Add(new ExampleAMap());
    modelBuilder.Configurations.Add(new ExampleBMap());
    modelBuilder.Configurations.Add(new ExampleCMap());
    // ....
}

вы можете получить доступ к каждому, используя:

ExampleContext context = new ExampleContext();
var a = context.Set<TopClass>();
var b = context.Set<ExampleA>();
var c = context.Set<ExampleB>();
// etc

Вам не нужно объявлять конкретные (или вообще любые) DbSet

person qujck    schedule 08.03.2013