i には 2 つの単純なオブジェクト 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; }
}
これら 2 つのオブジェクトを 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);
}
}
データベースを作成した後、2 つのテーブルを取得します。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 は最初に 2 つのテーブルを結合し、次に B のキー列を選択します
私の質問は:
テーブルAからカラム「BOject_id」の値だけを選択することはできますか?
この特殊なケースでは結合を避け、他のケースでは参照の利点を利用したいと考えています。