在这种情况下,如何让HQL加入正确的字段?

时间:2014-10-16 15:14:08

标签: left-join hql orchardcms

我正在开发基于Orchard CMS(1.7.1)的解决方案,并且正在用C#编写解决方案。

我有两个使用公共基类的表。 ProductRecord有一个零个或多个PLU的列表。

public class ModelBaseClass
{
    public abstract int Id {get;set;}
}

public class ProductRecord : ModelBaseClass
{
    [Key]
    public override int Id {get;set;}
    public virtual string Name {get;set;}
    public virtual ProductRecord MasterProductRecord {get;set;}
    public virtual IList<PLURecord> PLUs {get;set;}
}

public class PLURecord
{
    [Key]
    public override int Id {get;set;}
    public virtual string Name {get;set;}
    public virtual ProductRecord ProductRecord {get;set;}
}

然后,我希望使用HQL将所有带有相关PLU的产品作为左连接。

我的HQL是......

select product.Id, product.Name, plu.Id
from XYZ.Models.ProductRecord as product
left join product.PLUs as plu

HQL因MasterProductRecord的存在而产生混淆并产生一个不会执行的查询......

could not execute query 
[ select TOP (@p0) productrec0_.Id as col_0_0_, productrec0_.Name as col_1_0_, plus1_.Id as col_2_0_ from PROJ_XYZ_StockControl_ProductRecord productrec0_ left outer join PROJ_XYZ_StockControl_PLURecord plus1_ on productrec0_.Id=plus1_.MasterProductRecord_id ] 
[SQL: select TOP (@p0) productrec0_.Id as col_0_0_, productrec0_.Name as col_1_0_, plus1_.Id as col_2_0_ from PROJ_XYZ_StockControl_ProductRecord productrec0_ left outer join PROJ_XYZ_StockControl_PLURecord plus1_ on productrec0_.Id=plus1_.MasterProductRecord_id]

Invalid column name 'MasterProductRecord_id'.

如果SQL引用了ProductRecord_id字段而不是MasterProductRecord_id

,则它将起作用

那么,有没有办法告诉模型id字段应该用于连接还是忽略连接上的MasterProductRecord? 或者是否有更精确的方法来指定HQL中的连接?

**编辑:我在C#Base类中添加了信息,这是定义实际Id字段的地方。然后在模型类中重写它。这可能有用吗?

0 个答案:

没有答案