将SQL查询转换为NHibernate
本文关键字:NHibernate 转换 查询 SQL | 更新日期: 2023-09-27 18:15:28
我有一个SQL查询,我正试图将其转换为Nhibernate查询并运行它。
SQL查询SELECT
A.*
FROM
TestTable i
LEFT JOIN
TestTable o
ON
i.testColumn=o.testcolumn and i.testColumn1='TestColumn1'
WHERE o.StartDate <= '2016-10-28' and i.testColumn2 > 3
Nhibertnate查询
ObjectA是TestTable的c#对象版本
ObjectA o = null;
ObjectA i = null;
var query = Session.QueryOver(() => o)
.Left.JoinQueryOver(() => i)
.Where(() => o.testColumn == i.testColumn)
.Where(() => i.testColumn1 == "TestColumn1")
.Where(() => i.testColumn2 == 3
.Where(() => o.StartDate <= '2016-10-28')
return query.Take(100).List();
映射 public ObjectATableMap : ClassMap<ObjectA>
{
Schema("[Test]");
Table("[TestTable]");
Id(x => x.Id, "Id").GeneratedBy.Native();
Map(x => x.TestColumn1, "TestColumn1");
Map(x => x.TestColumn2, "TestColumn2");
Map(x => x.StartDate ,"StartDate");
}
当我运行上述查询时,我得到以下消息"无法解析属性:i of: ObjectA"谁能给我提供正确的hibernate查询。由于
错误:
"无法解析属性:i of: ObjectA"
与语句
相关Session.QueryOver(() => o)
.Left.JoinQueryOver(() => i)
,因为它期望class ObjectA
(o)引用class ObjectA
(i)。通常parent - child
public class ObjectA
{
public virtual ObjectA Parent { get; set; }
...
}
如果没有关系,我们不能使用QueryOver
API。我们可以使用HQL
- 使用QueryOver或createcrcriteria在Fluent Nhibernate中连接不相关的表
- NHibernate HQL Inner Join (SQL Server,Visual c#)
它不像QueryOver那样有很好的c# API,但它可以工作。