NHibernate Left Join without Foreign Key - 按字符串值加入

NHibernate Left Join without Foreign Key - Join by String value

我有 2 个实体(Oracle 数据库表)。

在这些 table 之间没有外键。如果 ProductEntity.Case_Size = ProductCsPcsEntity.CaseSize,我需要将 ProductCsPcsEntity 映射到 ProductEntity。

这意味着如果 ProductEntity 具有 ProductCsPcsEntity 中的 Casize,那么 ProductCsPcsEntity 行将保存到 ProductEntity 中的 属性,否则引用将为空。

存在 (ProductCsPcsEntity) 一对多 (ProductEntity) 关系,但 ProductCsPcsEntity 并非所有来自 ProductEntity 的 Casesizes(只有少数 - 60 个中有 20 个)。我想在 NHibernate 中使用类似 left join 的东西。

public sealed class ProductEntityXXMap : SubclassMap<ProductEntityXX>
{
    public ProductEntityXXMap()
    {
        Map(x => x.CaseSize, "CASE_SIZE");
        . . . . 
        References(x => x.CsPcs, "CASE_SIZE");


        DynamicUpdate(); 
    }
}

    class ProductCsPcsEntityMap : EntityMap<ProductCsPcsEntity>
{
    public ProductCsPcsEntityMap()
    {
        //Id(x => x.Id).GeneratedBy.Assigned();
        Table("ProductCsPcsEntity");
        Map(x => x.CaseSize, "CASESIZE");
        Map(x => x.Pcs, "PCS");
        Cache.ReadOnly();
    }
}

请问有什么解决办法吗?我使用 NHibernate v4.0.30319、Oracle DB 和 .NET 4。

如何在映射中加入这些 table?

 Join("ProductCsPcsEntity", x =>
            {
                //x.Fetch.Join().Optional();
                x.KeyColumn("CASE_SIZE");
                //x.Map(t => t.LeadFramePcs.Pcs).Column("PCS");
                x.Map(t => t.LeadFramePcs).Column("CASESIZE");

            });

但它加入 ProductEntityXX.id = ProductCsPcsEntity.casesize

我的有效解决方案:

Map(x => x.Pcs).Formula("(SELECT LF.PCS FROM ProductCsPcsEntity LF WHERE LF.CASE_SIZE = CASE_SIZE)");

看来这个解决方案可行,但并不好