結合を介してプロパティを別のテーブルにマップしようとすると問題が発生しますが、追加の基準があります。以下のコードは、参加しようとしているクラス用です。基本的には、TestLog テーブルに参加し、テスト ログ テーブルで定義されているプロセスで特定のメッセージ タイプ ID を検索して、ServerEventLog プロパティに参加したいと考えています。
public class ExecutedTest
{
public virtual int Id { get; set; }
public virtual TestLog TestLog { get; set; }
public virtual TestLog ServerEventLog { get; set; }
}
そして、テストログクラスは、マップしたいクラスです
public class TestLog
{
public virtual int ID { get; set; }
public virtual string Message { get; set; }
public virtual int ExecutedTestId { get; set; }
}
以下のクラス マップを使用して、次のようなものを生成する SQL を取得できます。
SELECT ...
FROM [ExecutedTest] executedte0_
inner join TestLog executedte0_1_ on
executedte0_.Id=executedte0_1_.ExecutedTestId
WHERE executedte0_.Id=?
public class ExecutedTestMap : ClassMap<ExecutedTest>
{
public ExecutedTestMap()
{
Id(x => x.Id);
References(x => x.TestLog).Column("LogId").Cascade.All();
this.Join(
"TestLog",
x =>
{
x.KeyColumn("ExecutedTestId");
});
}
}
しかし、私が解決できないのは、結合基準を介して次のようにSQLを生成する方法です(凝視されたビットの間に生成できないビットを強調表示しています)。
SELECT ...
FROM [ExecutedTest] executedte0_
inner join TestLog executedte0_1_ on
executedte0_.Id=executedte0_1_.ExecutedTestId
**** and executedte0_1_.MessageTypeId = 9 ****
WHERE executedte0_.Id=?
誰かが ClassMap を介してこれを達成する方法を知っていれば、どんな助けも大歓迎です。乾杯