0

有了以下DDD和存儲庫模式,是否有可能返回聚合根對象及其子數據已包含而不是使用延遲加載?DDD EF知識庫

例如我有一個倉庫實體作爲聚合根,它有一個叫做位置的子對象。

在存儲庫上我有一個方法來查詢位置Id,但傳回倉庫實體。

dim warehouse as Warehouse = warehouseRepository.FindByLocationId(Id as int32). 
dim locationName as string = warehouse.location.where(function(x) x.Id = 1).firstordefault.name 

當我使用warehouse.location EF使用代理類來觸發另一個數據庫查詢來檢索位置數據。 在我的存儲庫方法中,FindByLocationId是否可以查詢位置數據庫表並將包含位置數據的倉庫實體傳回?

回答

1

一般停止延遲加載和代理服務器,你可以在你的的DbContext類的配置屬性設置以下屬性。我傾向於在覆蓋OnModelCreating()方法時這樣做,所以我所有的「安裝」內容都在一起。

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     Configuration.LazyLoadingEnabled = false; 
     Configuration.ProxyCreationEnabled = false; 


     base.OnModelCreating(modelBuilder); 
    } 

如果你想急切地加載一個屬性,你可以使用包括()方法:

var wareHouse = (from w in ctx.WareHouses.Include("location") 
       select w).FirstOrDefault(); 
+0

+1的更完整的答案 –

+0

隨着包括聲明其拉回所有的子記錄對於倉庫,我只想顯示我正在查詢的1個子記錄。我嘗試了下面的代碼,但它仍然顯示所有的位置記錄。 Dim wareHouse =(from w In DataContextFactory.GetWMSDBContext.StockWarehouse Join sl In DataContextFactory.GetWMSDBContext.StockLocation on sl.WarehouseID Equals w.Id Where sl.Id = locationId Select w).FirstOrDefault() – user1180223