簡體   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