【发布时间】:2014-09-12 15:45:20
【问题描述】:
我有以下型号
public class Customer
{
public virtual long Id { get; set; }
public virtual string Name { get; set; }
public virtual IList<Invoice> Invoices { get; set; }
public virtual XDocument AlotOfData { get; set; }
}
public class Invoice
{
public virtual long CustomerId { get; set; }
public virtual long Id { get; set; }
public virtual IList<LineItem> LineItems { get; set; }
public virtual XDocument AlotOfData { get; set; }
}
public class LineItem
{
public virtual long InvoiceId { get; set; }
public virtual long Id { get; set; }
public virtual double Amount { get; set; }
public virtual XDocument AlotOfData { get; set; }
}
如果我只做一个普通的休眠查询来获得客户,它会如下所示。
long customerId = 1;
Customer customer = Session.QueryOver<Customer>().Where(x => x.Id == customerId).SingleOrDefault();
如果我的所有子集合的映射文件中有lazy="false",它将导致执行以下 Sql 查询
1 次查询以获取客户(仅从客户表中选择列)
1 次查询以获取该客户的所有发票(仅从发票表中选择列)
对 LineItems 表的 n 次查询(每个 Invoice 的一次查询仅从 LineItems 表中选择列)
我想知道的是如何保留当前正在执行的相同查询,而不是 nhibernate 对 LineItems 表进行 n 个单独的查询,它只会产生 1。有没有办法可以做到这一点通过 in 子句或连接到发票表,但不从发票表中选择列。
谢谢 杰里米
【问题讨论】:
-
这不是我想要的。不过谢谢
标签: sql .net nhibernate