[英]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.