2011-12-02 30 views
0

我希望我的應用程序在默認情況下不需要延遲加載。然而在某些情況下(我想明確設置),我需要延遲加載。默認不懶惰,在Fluent NHibernate中有例外

所以,我的默認約定(最後一行swithes關閉默認延遲加載):

Fluently.Configure().Database(driverConfig) 
      .Mappings(m => m 
       .FluentMappings.AddFromAssemblyOf<Limit>() 
       .Conventions.AddFromAssemblyOf<Limit>() 
       .Conventions.Add(PrimaryKey.Name.Is(x => x.EntityType.Name + "Id")) 
       .Conventions.Add(DefaultCascade.All()) 
       .Conventions.Add(ForeignKey.EndsWith("Id")) 
       .Conventions.Add(ConventionBuilder.Id.Always(x => x.GeneratedBy.Native())) 
       .Conventions.Add(ConventionBuilder.Id.Always(x => x.Unique())) 
       .Conventions.Add(Cache.Is(x => x.NonStrictReadWrite())) 
       .Conventions.Add(DefaultLazy.Never()) 

而且我想這許多關係是延遲加載:

 HasMany(x => x.TestCaseOrdered).KeyColumn("ProductVariantId").LazyLoad(); 

但是,它不是」懶惰加載。我試圖用LazyLoad.Never()替換DefaultLazy.Never()約定,但它不起作用(我無法理解它們之間的區別)。

如何輕鬆關閉除一個具體的所有情況下的延遲加載?

+1

工作對我來說,你怎麼確定它是否lazyloaded與否? – Firo

+0

在搜索測試代碼時,我在哪裏檢查發現我總是以非懶惰方式檢索它們。謝謝你的提示 :) – Archeg

回答

0

我檢索與代碼測試:

using (ISession session = GetSessionFactory().OpenSession()) 
     { 
      // TODO: Criteria + lazy 
      var productVariants = session.CreateCriteria<ProductVariant>().List<ProductVariant>().ToArray(); 

      // TODO: Lazy loading should be available 
      foreach (var product in productVariants) 
      { 
       var testCaseDataOrders = product.TestCaseOrdered.ToList(); 
       testCaseDataOrders.Select(x => x.TestCaseData.Id); 
      } 

      return productVariants; 
     } 

這是問題