NHibernate - 没有(总是)进行SQL连接的引用

时间:2012-01-26 22:56:32

标签: nhibernate fluent-nhibernate

我有一个问题,可能是代码/设计很臭,但我还是会问它。

说我下面有两个琐碎的课程:

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 而不用连接?这个例子很简单,但在我的实际情况中,连接的表有数百万行,所以我想尽可能避免连接。

提前致谢!

1 个答案:

答案 0 :(得分:0)

如果字段ZipCodeStreetAddress实际位于Person表中,则您需要将PostOffice映射为Component而不是{{1} }}

http://wiki.fluentnhibernate.org/Auto_mapping#Components

编辑:

您可以将单独的属性映射到该ZipCode字段。

Reference