使用 NHibernate 查询语言 HQL 在单独的数据库中加入 table 和另一个 table
Join table with another table in a seperate database using NHibernate Query Language HQL
我正在尝试使用 NHibernate 从另一个数据库加入 table。我基本上在 table 名称前面加上我之前在映射文件中完成的数据库名称,并且它已经起作用。
请看下面我的代码:
query.CreateAlias("OtherDatabase.SiteProduct","OtherDatabase.SiteProduct", JoinType.InnerJoin);
但是,我收到以下错误消息:
NHibernate.QueryException: could not resolve property: OtherDatabase of: XXX.XXXXX.Core.Domain.Catalog.Product
这可以在 NHibernate 中实现吗?我假设因为没有外键将两个 table 联系在一起,所以我可能需要指定两个 table 需要连接在哪一列?
支持与其他 DB/Table (可通过当前连接访问) 合作。这里的问题是.. table 的路径必须来自映射。
我们可以使用标准映射 Class,也可以只引入动态字典映射。例如。
<class entity-name="OtherDBTable" table="[otherDB].[schema].[Table]" ... >
<id name="ID" column="id" type="Int32" />
<property name="PropertyName" column="ColName" type="String" />
...
</class>
JOIN 没有映射关系
Despite of the title .. about HQL .. the broken statement
query.CreateAlias("...
seems to belong to CreateriaQuery
... which we will use to JOIN this table
那么,让我们创建标准的 CriteriaQuery
var query = session.CreateCriteria<MyInnerEntity>("rootAlias");
我们可以像这样将它加入动态映射的其他 DB/Table
query.CreateEntityAlias("otherAlias",
Restrictions.EqProperty("rootAlias.OtherId", "otherAlias.ID"),
JoinType.InnerJoin,
"OtherDBTable"
);
我们可以得到结果
query.SetProjection(Projections.ProjectionList()
.Add(Projections.Property("rootAlias.ID"))
.Add(Projections.Property("rootAlias.OtherId"))
.Add(Projections.Property("otherAlias.ID"))
.Add(Projections.Property("otherAlias.PropertyName"))
);
最后我们可以将其作为数组列表读取(或对其进行转换...)
var list = query.List<object[]>();
使用映射关系加入
以防万一,我们到其他 DB/Table 的映射将包含一个关系(例如多对一)..我们甚至可以使用标准 CreateAlias
..但仍然......我们越过当前数据库边界的事实..必须来自映射
我正在尝试使用 NHibernate 从另一个数据库加入 table。我基本上在 table 名称前面加上我之前在映射文件中完成的数据库名称,并且它已经起作用。
请看下面我的代码:
query.CreateAlias("OtherDatabase.SiteProduct","OtherDatabase.SiteProduct", JoinType.InnerJoin);
但是,我收到以下错误消息:
NHibernate.QueryException: could not resolve property: OtherDatabase of: XXX.XXXXX.Core.Domain.Catalog.Product
这可以在 NHibernate 中实现吗?我假设因为没有外键将两个 table 联系在一起,所以我可能需要指定两个 table 需要连接在哪一列?
支持与其他 DB/Table (可通过当前连接访问) 合作。这里的问题是.. table 的路径必须来自映射。
我们可以使用标准映射 Class,也可以只引入动态字典映射。例如。
<class entity-name="OtherDBTable" table="[otherDB].[schema].[Table]" ... >
<id name="ID" column="id" type="Int32" />
<property name="PropertyName" column="ColName" type="String" />
...
</class>
JOIN 没有映射关系
Despite of the title .. about HQL .. the broken statement
query.CreateAlias("...
seems to belong to
CreateriaQuery
... which we will use to JOIN this table
那么,让我们创建标准的 CriteriaQuery
var query = session.CreateCriteria<MyInnerEntity>("rootAlias");
我们可以像这样将它加入动态映射的其他 DB/Table
query.CreateEntityAlias("otherAlias",
Restrictions.EqProperty("rootAlias.OtherId", "otherAlias.ID"),
JoinType.InnerJoin,
"OtherDBTable"
);
我们可以得到结果
query.SetProjection(Projections.ProjectionList()
.Add(Projections.Property("rootAlias.ID"))
.Add(Projections.Property("rootAlias.OtherId"))
.Add(Projections.Property("otherAlias.ID"))
.Add(Projections.Property("otherAlias.PropertyName"))
);
最后我们可以将其作为数组列表读取(或对其进行转换...)
var list = query.List<object[]>();
使用映射关系加入
以防万一,我们到其他 DB/Table 的映射将包含一个关系(例如多对一)..我们甚至可以使用标准 CreateAlias
..但仍然......我们越过当前数据库边界的事实..必须来自映射