【问题标题】:NHibernate select from more then one tableNHibernate 从多个表中选择
【发布时间】:2013-04-03 10:59:41
【问题描述】:

如何使用 NHibernate 对象编写这个选择?

Select a.Id, a.Name, b.Data 
From Table1 a, Table2 b
Where a.Id between :1 and :2
And :3 = b.Period(+)
And 1 = b.Type(+)
And a.Id = b.Table1Id(+)
Order by 1

即它为所有 Table1 行提供每行的 Table2.Data,即使它没有 Table2 数据(然后将给出 0 或 null)

表 1 和表 2 的类和映射已经创建,并且可以正常工作。还添加了 b.Table1Id 的参考。

所以问题主要出在(+)运算符上。

映射: Table1 非常简单,没有引用任何表。 表2:

Table("Table2");
CompositeId()
 .KeyProperty(x => x.Type)
 .KeyProperty(x => x.Table1Id)
 .KeyProperty(x => x.Period);
Map(x => x.Type);
Map(x => x.Table1Id);
Map(x => x.Period);
Map(x => x.Data);
ReferencesAny(x => x.TableG)
 .IdentityType<string>()
 .EntityTypeColumn("Type")
 .EntityIdentifierColumn("Table1Id")
 .AddMetaValue<Table1>("1")
 .AddMetaValue<Table33>("33");

Table1 和 Table33 来自一个父类 TableG。 Sql 查询现已相应更新。

【问题讨论】:

  • 您也可以显示映射吗?你有什么尝试让这个查询在 nhibernate 中运行?
  • 添加了映射。而且我根本没有尝试这样做,我不知道从什么开始。

标签: .net sql nhibernate fluent-nhibernate


【解决方案1】:

您可以执行以下操作来获取记录。并使用投影来选择您想要的字段。 有一个类似的示例here 可以帮助您入门。

var queryResult = Session.QueryOver<Table2>()
                    .Left.JoinAlias(table2 => x.Period, () => period)
                    .Where(table2 => table2.Id >= value1)
                    .Where(table2 => table2.Id <= value2)
                    .Where(table2 => table2.Type == 1)
                    .OrderBy(table2 => table2.Type).List<Table2>();

【讨论】:

    猜你喜欢
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 2021-11-08
    • 2014-01-12
    • 2011-02-01
    • 2010-10-11
    • 2021-03-19
    相关资源
    最近更新 更多