![](/img/trans.png)
[英]Include all navigation properties using Reflection in generic repository using EF Core
[英]Include all the properties from all the inherited classes using EF Core
使用EF6時,我使用的是延遲加載,所以我從來沒有遇到過這個問題,但是使用EFCore,我不知道使用單個查詢是否可以做到這一點。
我有以下課程結構
class A { public B b; }
class B { public ICollection<C> list_c; }
class C { public ICollection<D> list_d; }
abstract class D { public long c_id; }
class Da { public E e; }
class Db { public F f; }
我需要所有D
對象的列表,但需要分別訪問它們的e
和f
屬性。 目前,我在使用以下查詢的前半部分獲取的c_id
列表中查詢_db.D
,有一個有效的查詢,但是使用這種方法,我發送了一個查詢以獲取所有c_id
和那么每種類型一個查詢(我有4種類型)。
我想知道是否可以通過一個看起來像這樣的呼叫使其工作:
_db.As.Include(x => x.b)
.ThenInclude(x => x.list_c)
.ThenInclude(x => x.list_d)
// some magic here
.FirstOrDefaultAsync(x=> x.Id = model.Id);
編輯:
目前,這是我列出清單的方式:
var a = await _db.As.Include(x => x.b)
.ThenInclude(x => x.list_c)
.FirstOrDefaultAsync(x=> x.Id = model.Id);
var result = await _db.Ds.OfType<Da>()
.Include(x=>x.e)
.Where(x=>a.b.list_c.Any(y=>y.Id == x.c_id))
.Select(x=>(D)x)
.Concat(_db.Ds.OfType<Db>()
.Include(x=>x.f)
.Where(x=>a.b.list_c.Any(y=>y.Id == x.c_id))
.Select(x=>(D)x)).
.ToListAsync();
如果可以的話,我建議不要使用Entity Framework Core。 在https://github.com/aspnet/EntityFrameworkCore/wiki/Roadmap上檢查路線圖-它目前沒有延遲加載,這是(非常令人討厭的)缺點的名稱。
您可以在.NET 4.6項目中擁有數據訪問層,並擁有使用中的項目,即使使用中基於Core的用戶也可以毫不費力地引用該項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.