NHibernate - 有很多 - 有一个 - ICriteria

时间:2013-04-09 21:24:19

标签: nhibernate fluent-nhibernate-mapping

我有以下表格:

表格材料
标识
表区
标识
表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必须留下来) 感谢。

1 个答案:

答案 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();