以下给出的代码示例是要检索所有活动记录。具有限制的NHibernate CreateCriteria不能按预期工作
session.CreateCriteria<VesselMasterData>()
.CreateAlias("BasicInfo", "bsInfo")
.CreateAlias("DimentionInfo", "diInfo")
.Add(Restrictions.Eq("IsActive", 1))
.Add(Restrictions.Eq("diInfo.IsActive", 1))
.Add(Restrictions.Eq("MasterDataID", masterDataID))
.Add(Restrictions.Eq("bsInfo.IsActive", 1))
.List<VesselMasterData>()
父表VesselMasterData和子表是BasicInfo和DimentionInfo。 基于查询期望值应该是BasicInfo和DimentionInfo的所有活动记录。
但在输出我从BasicInfo和DimentionInfo获取所有记录。可能是什么问题。
这是VesselMasterData表的映射。
public class VesselMasterDataMap : ClassMap<VesselMasterData>
{
public VesselMasterDataMap()
{
Table("VPD_VESSEL_MASTER_DATA");
Schema("APPLN1");
Id(x => x.MasterDataID).Column("MASTER_DATA_ID").GeneratedBy.Sequence("VPD_VESSEL_MASTER_DATA_SEQ");
Map(x => x.VesselCode).Column("VESSEL_CODE");
Map(x => x.IsActive).Column("IS_ACTIVE");
HasMany<VesselBasicInfo>(prop => prop.BasicInfo)
.KeyColumns.Add("MASTER_DATA_ID").Cascade.SaveUpdate().Inverse().Not.LazyLoad();
HasMany<VesselDimension>(prop => prop.DimentionInfo)
.KeyColumns.Add("MASTER_DATA_ID").Cascade.SaveUpdate().Inverse().Not.LazyLoad();
}
}
感谢您的及时回复。不幸的是,BasicInfo和DimentionInfo没有名为MasterDataID的属性,因为它们只有MasterData。这是对父表的引用。还有一件事情,因为我使用WCF引用从子实体的父实体没有实现。如果我实现,那么会出现循环冗余问题。 – Desmond
@Desmond:是否有任何关系属性?另外我认为你需要使用'Restrictions.And'来添加各种条件。我更新了答案。请检查,如果有帮助。 –
我尝试过,但它返回相同。我创建了一个查询并发布在下面的答案中,它工作正常。但我确实需要使用CreateCriteria来找到等价的。如果你能把它转换成它会很感激。 – Desmond