2012-02-13 92 views
0

请查看下面的映射。获取对象时未加载列表

当我这样做: ​​结果返回是正确的客户,但Address列表为空。在数据库中,我看到了客户记录和地址。在Customer_id(由NHibernate生成)字段中的地址记录不为空,并且具有正确的值(客户的ID)。

类和映射

public class Customer 
{ 
    public virtual int Id { get; set; } 
    public virtual string LastName { get; set; } 
    public virtual Iesi.Collections.Generic.ISet<CustomerAddress> Address { get; set; } 

    public Customer() 
    { 
     Address = new Iesi.Collections.Generic.HashedSet<CustomerAddress>(); 
    } 
} 

public class CustomerAddress 
{ 
    public virtual int Id { get; set; } 
    public virtual string Street { get; set; } 
    public virtual Customer Customer { get; set; } 
} 

public class CustomerMap : ClassMap<Customer> 
{ 
    public CustomerMap() 
    { 
     Id(x => x.Id).GeneratedBy.Native(); 
     Map(x => x.LastName) 
      .Length(50) 
      .Not.Nullable();  
     HasMany(x => x.Address) 
      .AsSet() 
      .Inverse() 
      .Cascade.AllDeleteOrphan(); 
    } 
} 

public class CustomerAddressMap : ClassMap<CustomerAddress> 
{ 
    public CustomerAddressMap() 
    { 
     Id(x => x.Id).GeneratedBy.Native(); 
     Map(x => x.Street).Length(50); 
     References(x => x.Customer); 
    } 
} 

回答

3

延迟加载默认情况下启用,这意味着,直到触摸Address属性,您将不检索地址。你可以在你的映射禁用延迟加载有:

HasMany(x => x.Address) 
     .AsSet() 
     .Inverse() 
     .Cascade.AllDeleteOrphan() 
     .Not.LazyLoad();