我有兩個表,一個是自引用這樣的:有沒有辦法自定義實體查詢的默認行爲?
Job (id, description)
JobAssembly (id, jobid, parentassemblyid)
我也以同樣的方式有兩個域對象:
public class Job
{
public int Id { get; set; }
public string Description { get; set; }
public virtual List<JobAssembly> Assemblies { get; set; }
}
public class JobAssembly
{
public int Id { get; set; }
public int JobId { get; set; }
public virtual Job { get; set; }
public int? ParentAssemblyId { get; set; }
public virtual JobAssembly ParentAssembly { get; set; }
public virtual List<JobAssembly> SubAssemblies { get; set; }
}
這是問題所在。當我使用EF時:
using (var db = new JobContext())
{
var job = db.Jobs.Find(1);
}
我按預期得到所要求的工作。但它帶有所有的裝配 - 不僅僅是父母,還有子裝配。這也是預料之中的。
我的問題是:我如何指示EF只帶入沒有子裝配的JobAssemblies ...作爲默認行爲?我知道如何查詢EF的父級程序集。但有沒有辦法設置映射,或者其他方式,將默認查詢行爲設置爲僅獲取其parentassemblyid == null的程序集?
謝謝:)
編輯:
讓我來說明一下:
我有ID的工作= 1,它有一個裝配有ID = 1組件1有兩個子組件分別是ids = 2和3。當執行var job = db.Jobs.Find(1)時,EF像這樣填充對象圖:
作業具有全部三個程序集(因爲jobid在所有三個== 1上)。具有ID 1的JobAssembly使其子部件適當地填充。
所有這些都是預期的,但如果我可以定製EF如何加載對象,那將會很好。作業不應該具有JobId == 1的每個JobAssembly,但只有JobId == 1和ParentAssemblyId == null的地方。
你能顯示代碼?沒有'虛擬'關鍵字,因此不會延遲加載。所以你必須急於加載它,否則你不會得到任何程序集所有的程序集 – Colin
我的錯。讓我顯示虛擬關鍵字。我將編輯。 –
你想引入「只是父母」 - 即樹的根。或者你想引入「JobAssemblies沒有子裝配」 - 即葉子? – Colin