没有外键的NHibernate左联接-按字符串值联接

时间:2018-06-22 09:38:35

标签: asp.net-mvc c#-4.0 nhibernate oracle11g fluent-nhibernate

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

  • ProductEntity(具有CaseSize-字符串列)
  • ProductCsPcsEntity(具有CaseSize列-字符串且没有ID)

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

这意味着如果ProductEntity在CaseCsPcsEntity中具有Casesize,则比ProductCsPcsEntity行将被保存到ProductEntity中的属性中,否则引用将为null。

存在一个关系(ProductCsPcsEntity)一对多(ProductEntity),但是ProductCsPcsEntity并不具有ProductEntity中的所有Casesize(仅从60个中只有20个)。我想在NHibernate中使用左连接之类的东西。

Tables

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。

  • 是否有可能使表和实体没有ID,例如DB中的主键
  • 我不使用XML表映射定义
  • ProductEntityXX中的所有行都具有任何CaseSize VARCHAR值(值的60种类型)
  • ProductCsPcsEntityMap有20个CaseSizes,我想加入到ProductEntityXX中,而ProductEntityXX中只有ProductCsPcsEntityMap中的一行或空行

OR

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

 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

1 个答案:

答案 0 :(得分:1)

我有效的解决方案:

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

该解决方案似乎可行,但效果不佳