繁体   English   中英

直接访问是否需要DBSet?

[英]Is DBSet required for direct access?

我敢肯定我已经知道答案了,但是我需要别人的确认。 问题涉及在实体框架:代码优先中使用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..
}

值得注意的是,只有DbSet是用于TopClass的DbSet。 顶级类的对象可以保存到数据库中,放在TopClass-objects / ExampleA-object列表中的ExampleA,ExampleB和ExampleC的对象也可以保存到数据库中。 如果我从数据库加载TopClass对象,则列表中的所有其他对象也将被加载。 换句话说,我可以访问通过TopClass对象保存到数据库中的其他对象。

现在有一个我正在和我的同事讨论的问题:
如果我想直接访问ExampleA的对象,而不必加载TopClass对象和所有其他相关对象(也无需使用SQL编码或lambda-expression),我是否需要为ExampleA使用DbSet? 还是有可能减少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

您无需声明特定的(或实际上任何) DbSet

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM