由于我刚刚开始使用Fluent NHibernate,我正在创建一个非常简单的应用程序示例,下面将介绍其类:
////////////////////////////// DOMAIN CLASSES /////////////// ////////////////
public class Company
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual IList<Employee> Employees { get; set; }
public Company()
{
Employees = new List<Employee>();
}
}
public class Employee
{
public virtual int Id { get; set; }
public virtual int Idade { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public virtual Company objCompany { get; set; }
}
//////////////////////////////映射类/////////////// ////////////////
public class CompanyMap : ClassMap<Company>
{
public CompanyMap()
{
LazyLoad();
Id(x => x.Id);
Map(x => x.Name);
HasMany(x => x.Employees).Cascade.All();
}
}
public class EmployeeMap : ClassMap<Employee>
{
public EmployeeMap()
{
LazyLoad();
Id(x => x.Id);
Map(x => x.Idade);
Map(x => x.FirstName);
Map(x => x.LastName);
Map(x => x.Cargo);
References(x => x.objCompany);
}
}
//////////////////////////////我的问题/////////////// ////////////////
所以我想要做的是加载一个COMPANY实例而不加载EMPLOYEES列表,然后只在必要时加载。
我猜它引用了lazyloadind的概念,因为我已经声明了类级别LazyLoad();我不明白为什么NHibernate在加载COMPANY对象时仍然会加载所有内容。
以下是搜索公司对象的代码示例:
PS。:_nhibernateSession已经是一个开放的会话。
public static IList<Company> FindAll()
{
return _nhibernateSession.QueryOver<Company>().List();
}
答案 0 :(得分:0)
您是否100%确定它不会触发另一个查询来加载员工列表?使用sql server profiler搞清楚......
无论如何,映射它的正确方法是
HasMany(x => x.Employees).Cascade.All().LazyLoad();