簡體   English   中英

使用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對象的列表,但需要分別訪問它們的ef屬性。 目前,我在使用以下查詢的前半部分獲取的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.

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