簡體   English   中英

使用實體框架僅從父表中獲取記錄

[英]Fetch records from parent table only, using Entity Framework

我的項目中有以下實體(孩子超過兩個):

在此處輸入圖片說明

當我使用TPT策略進行繼承時,有沒有辦法只從父表加載記錄(沒有任何額外的連接),使用EF

通過以下代碼:

var result = ctx.Parents.Find(5);
//or
var result = ctx.Parents.OfType<Parent>().Find(5);

EF生成了一個巨大的SQL查詢! (在我的真實模型中,我有 2 個以上的孩子)

無論您查詢ctx.Parents還是ctx.Parents.OfType<Parent>() ,您總是要求 EF 獲取滿足條件的所有Parent實體(在本例中為Id == 5 )。 EF 無法提前知道這將是子類型化還是非子類型化Parent實體(它可以,如果Parent不是抽象的),因此它始終必須執行完整查詢。

TPT 不是一個對查詢非常友好的模型。 我不會使用它(並盡可能避免繼承,就此而言)。

創建沒有任何屬性的新子類

[Table("EmptyChild")]
public class EmptyChild: Parent
{

}

現在選擇原始查詢:

public Parent GetParent(Guid id)
{
    var parent = ctx.Database.SqlQuery<EmptyChild>("Select * from Parents where Id=@id", new SqlParameter("@id", id)).FirstOrDefault();

    return parent as Parent ;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM