0

我有以下表格:

表格材料
ID
表格区域
ID
表格材料
区域 ID
材料_Id 区域
_Id
价格


编辑
我需要的是在 Material 对象中有 MaterialZone(当前区域),我不知道我是否可以通过映射或查询来解决它,因为关系“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 an ComponentOne)

我试图通过映射和查询来解决这个问题,但我运气不佳。我在 NHibernate 和 Mapping 方面有中等经验,而在 QueryOver 和 ICriteria 方面经验很少

我对所有解决方案持开放态度(但不幸的是,Access 必须保留)谢谢。

4

1 回答 1

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();
于 2013-04-14T22:30:26.990 回答