c# - 是否可以通过 composite-id 的多对一键进行导航?

标签 c# nhibernate join composite-id

是否可以在 Nhibernate 中通过复合 ID 的键多对一关联进行导航?

我有几个(遗留)表,我使用以下设置映射:

<class name="StructureUser">
    <composite-id>
        <key-many-to-one name="Structure" class="Structure" column="STRUKTUR_ID" />
        <key-many-to-one name="User" class="User" column="USERID" />
    </composite-id>
    ...
</class>

<class name="Structure">
    <id name="Id" column="id" type="Int32" >
        <generator class="native"/>
    </id>
    <property name="Low" column="low" type="Int32" />
    ...
</class>

我想通过查询中的 StructureUser 类访问 Structure 的“Low”属性。我尝试了我能想到的 Criteria API 的所有用法,但总是出错。这是我尝试过的两个查询:

ICriteria crit1 = Session.CreateCriteria(typeof(StructureUser))
    .CreateAlias("Structure", "struc")
    .Add(Restrictions.Le("struc.Low", 123));

ICriteria crit2 = Session.CreateCriteria(typeof(StructureUser))
    .Add(Restrictions.Le("Structure.Low", 123));

crit1 中的错误来自数据库并表示“struc_1.Low 在此上下文中无效”,因为 NHibernate 不会生成 sql 命令中的限制所需的连接。 crit2 中的错误来自 NHibernate,告诉我它无法访问 StructureUser 上的“Structure.Low”属性。

我通过使用 key-property 元素声明 composite-id 并声明与普通的多对一元素的关系来解决这个问题。

这个问题还有其他解决方案吗?

最佳答案

你试过吗

ICriteria crit1 = Session.CreateCriteria(typeof(StructureUser))
    .CreateCriteria("Structure", "struc")
    .Add(Restrictions.Le("struc.Low", 123));

关于c# - 是否可以通过 composite-id 的多对一键进行导航?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1276923/

相关文章:

c# - 我可以以编程方式将链接按钮添加到 gridview 吗?

c# - 流利的 NHibernate : How can i use Int64 as ID?

nHibernate 和 SQL Server 2012 LocalDB

mysql - SQL 使用复合主键填充自定义表

php - Mysql 连接两个表来检查用户是否做出了选择

c# - Linq to entity order by sql

c# - 如何在单个项目中从 c# 中的多个配置文件中读取值?

winforms - 更新后如何使用 NHibernate 从数据库中检索最新数据?

MYSQL left join 多个字段

c# - 在 IIS6 上使用 asp.net C# 3.5 自定义 404 页面