我有两个简单的对象 A 和 B。对象 A 引用了对象 B。
public class A
{
public virtual Guid AId { get; set; }
public virtual string Name { get; set; }
public virtual B BObject { get; set; }
}
public class B
{
public virtual Guid BId { get; set; }
public virtual string Name { get; set; }
}
我用 Fluent-NHibernate 映射了这两个对象:
public class AMap : ClassMap<A>
{
public AMap()
{
Id(x => x.AId);
Map(x => x.Name);
References<B>(x => x.BObject);
}
}
public class BMap : ClassMap<B>
{
public BMap()
{
Id(x => x.BId);
Map(x => x.Name);
}
}
创建数据库后,我得到两个表。A 的表有一个附加列“BObject_id”。
我有一个特殊情况,我只需要选择被引用对象 B 的 id。我使用 LINQ 来选择它。
var test = session.Query<A>().Select(x => x.BObject.BId);
这会产生 sql 查询(我使用的是 MSSQL2012):
select b1_.BId as col_0_0_ from iadb.[A] a0_ left outer join iadb.[B] b1_ on a0_.BObject_id=b1_.BId
Hibernate先将两张表连接起来,然后选择B的key列
我的问题是:
是否可以仅从表 A 中选择“BOject_id”列的值?
我想在这种特殊情况下避免加入,并在其他情况下使用引用的好处。