【发布时间】:2012-01-26 22:56:32
【问题描述】:
我有一个问题可能带有代码/设计的臭味,但我还是要问它。
假设我有以下两个微不足道的类:
public class PostOffice
{
public virtual string ZipCode {get; set;}
public virtual string StreetAddress {get; set;}
}
public class Person
{
public virtual in ID {get; protected set;}
public virtual string FirstName {get; set;}
public virtual string LastName {get; set;}
public virtual PostOffice ZipCode {get; set;}
}
我使用 FluentNHibernate 将 PostOffice.ZipCode 设置为 ID,并在下面提供了映射覆盖:
model.Override<Person>(p=> p.References( z=> z.ZipCode, "ZipCode"));
数据库中的 Person.ZipCode 只是一个 VARCHAR,我通常会写一些类似的 SQL
SELECT *
FROM Person
WHERE ZipCode = '90210'
但如果我有一个 NHibernate 会话并执行以下操作:
session.Query<Person>().Where(p=>p.ZipCode == '90210')
生成的 SQL(漂亮打印)看起来像
SELECT p.*
FROM Person p INNER JOIN PostOffice o
ON p.ZipCode = o.ZipCode
WHERE o.ZipCode = '90210'
我的问题 - 如果实体默认是延迟加载的,是否可以指定一些映射属性以便 NHibernate 将生成 SQL 没有连接?这个例子很简单,但在我的实际情况下,要加入的表有数百万行,所以我想尽可能避免加入。
提前致谢!
【问题讨论】:
标签: nhibernate fluent-nhibernate