Я почти уверен, что уже знаю ответ, но мне нужно, чтобы его подтвердили другие. Вопрос касается использования 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 для нескольких классов подчеркивает для меня эффективное кодирование, а не то, что возможно и что невозможно.