我有2个实体(Oracle数据库表)。
在这些表之间没有外键。如果ProductEntity.Case_Size = ProductCsPcsEntity.CaseSize,我需要将ProductCsPcsEntity映射到ProductEntity。
这意味着如果ProductEntity在CaseCsPcsEntity中具有Casesize,则比ProductCsPcsEntity行将被保存到ProductEntity中的属性中,否则引用将为null。
存在一个关系(ProductCsPcsEntity)一对多(ProductEntity),但是ProductCsPcsEntity并不具有ProductEntity中的所有Casesize(仅从60个中只有20个)。我想在NHibernate中使用左连接之类的东西。
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。
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
答案 0 :(得分:1)
我有效的解决方案:
Map(x => x.Pcs).Formula("(SELECT LF.PCS FROM ProductCsPcsEntity LF WHERE LF.CASE_SIZE = CASE_SIZE)");
该解决方案似乎可行,但效果不佳