C# 直接访问是否需要DBSet?

C# 直接访问是否需要DBSet?,c#,entity-framework,dbcontext,dbset,C#,Entity Framework,Dbcontext,Dbset,我很确定我已经知道答案了,但我需要别人的确认。 问题涉及在实体框架中使用DbSet:代码优先。(使用C#) 让我们以这些小类为例: class TopClass { Public List<ExampleA> ListOne {get; set;} Public List<ExampleB> ListTwo {get; set;} //Other contents ... } class ExampleA { Public List&l

我很确定我已经知道答案了,但我需要别人的确认。 问题涉及在实体框架中使用DbSet:代码优先。(使用C#)

让我们以这些小类为例:

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 ...
}
class顶级
{
公共列表列表一{get;set;}
公共列表ListTwo{get;set;}
//其他内容。。。
}
A类示例
{
公共列表列表树{get;set;}
//其他内容。。。
}
B类示例
{
//内容。。。
}
类示例C
{
//内容。。。
}
所以TopClass有一个名为ExampleA和ExampleB的类列表,ExampleA有一个ExampleC列表

从DbContext继承的类可以如下所示:

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

    //Other contents..
}
类示例上下文:DbContext
{
公共DbSet topClass{get;set}
//其他内容。。
}
简而言之,只有DbSet是顶级的。TopClass的对象可以保存到数据库中,放入TopClass对象/ExampleA对象列表中的ExampleA、ExampleB和ExampleA对象也将保存到数据库中。如果我从数据库加载TopClass对象,列表中的所有其他对象也将被加载。换句话说,我可以通过TopClass的对象访问保存到数据库中的其他对象

现在有一个问题我一直在和我的一位同事讨论:
如果我想直接访问ExampleA的对象,而不必加载TopClass对象和所有其他相关对象(也不必使用SQL编码或lambda表达式),那么我是否需要一个DbSet作为ExampleA?或者可以减少DbSet的负载,使其只包含我想要的对象吗?如果是,甚至可以在不加载TopClass的情况下加载ExampleA对象吗


我想有些答案是显而易见的。我自己认为,必须有一个DbSet来直接访问数据库中该类的对象,而不必加载TopClass对象。然而,我需要知道,而不是相信,所以我请求你确认或否定我的信仰。至于到目前为止我在互联网上读到的内容,有些是在文学中读到的,在几个类中使用DbSet强调了有效的编码,但不是什么是可能的,什么是不可能的。

假设存在以下代码:

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
ExampleContext=newexampleContext();
var a=context.Set();
var b=context.Set();
var c=context.Set();
//等
您不需要声明特定(或任何)的
DbSet