我很确定我已经知道答案,但我需要其他人确认。问题涉及在实体框架中使用 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 ...
}
所以 TopClass 有名为 ExampleA 和 ExampleB 的类的列表,而 ExampleA 有一个 ExampleC 的列表。
从 DbContext 继承的类可能是这样的:
class ExampleContext : DbContext
{
public DbSet<TopClass> TopClasses {get; set}
//Other contents..
}
Cuttently,只有 DbSet 是 TopClass 的一个。Topclasses的对象可以保存到数据库中,ExampleA、ExampleB和ExampleC的对象被放入TopClass-objects/ExampleA-object的列表中,也将被保存到数据库中。如果我从数据库中加载 TopClass 对象,列表中的所有其他对象也将被加载。换句话说,我可以通过 TopClass 的对象访问已保存到数据库中的其他对象。
现在有一个问题,我一直在与我的一位同事讨论:
如果我想直接访问 ExampleA 的对象,而无需加载 TopClass 对象和所有其他相关对象(也无需使用 SQL 编码或 lambda-表达式),我是否需要 ExampleA 的 DbSet?或者是否可以减少 DbSet 的负载以仅包含我想要的对象?如果是,是否甚至可以在不加载 TopClass 的情况下加载 ExampleA 的对象?
我认为有些答案是显而易见的。我自己相信必须有一个 DbSet 来直接访问数据库中该类的对象,而不必加载 TopClass 对象。但是,我需要知道,而不是相信,所以我要求您确认或否定(?)我的信念。至于到目前为止我在 Internet 上和一些文献中读到的内容,在几个课程中使用 DbSet 向我强调了有效的编码,但不是什么是可能的和不可能的。