我有以下表格:
表格材料
标识
表区
标识
表MaterialZone
标识
Material_Id
Zone_Id
价
修改
我需要的是在Material对象中拥有MaterialZone(在当前区域中),我不知道我是否可以通过映射或Query来解决它,因为关系“Id”在MaterialZone表中。
地图
MapMaterialZone()
{
Id(x => x.Id).GeneratedBy.Identity();
///Properties
References(x => x.Material).Column("material_id");
References(x => x.Zone).Column("zone_id");
}
MapZona()
{
Id(x => x.Id).GeneratedBy.Identity();
///Properties
}
MapMaterial()
{
Id(x => x.Id).GeneratedBy.Identity();
///Properties
//HasMany(x => x.ListMaterialZone);
//HasOne(x => x.IndividualMaterialZone).PropertyRef(MaterialZona => MaterialZona.Material);
}
我首先尝试添加并映射IList<“MaterialZone”>,并且MaterialZone属性在列表中搜索并返回具有当前区域的那个,但是查询和控件太慢了。 (我正在使用Access和ComponentOne)
我试图通过映射和Querys来解决这个问题,但我没有多少运气。我在NHibernate和Mapping方面有丰富的经验,在QueryOver和ICriteria方面经验不足
我对所有解决方案持开放态度(但不幸的是,Access必须留下来) 感谢。
答案 0 :(得分:0)
我找到了一个解决方案,我的映射
MaterialMap
HasOne(x => x.MaterialZona).PropertyRef(materialZona => materialZona.Material);
和最终的QueryOver
ISession session = GetSession();
Zona zonaPredeterminada = GetDefaultZone();
Material materialAlias = null;
MaterialZona materialZonaAlias = null;
return session.QueryOver<Material>(() => materialAlias)
.JoinQueryOver(mat => mat.MaterialZona, () => materialZonaAlias)
.Where(mZ => mZ.Zona.Id == zonaPredeterminada.Id)
.And(mZ => mZ.Material.Id == materialAlias.Id)
.List();