我目前正在尝试让(Fluent)NHibernate 将对象映射到我们的旧数据库模式。涉及三个表。
- 表 a 包含我需要检索的实际对象的大部分信息
- 表b是连接表a和表c的表
- 表 c 有一个我需要的对象的附加字段
检索信息的 SQL 查询如下所示:
SELECT z.ID, z.ZANR, e.TDTEXT
FROM PUB.table_a z
JOIN PUB.table_b t ON (t.TDKEY = 602)
JOIN PUB.table_c e ON (e.ID = t.ID AND e.TDNR = z.ZANR)
WHERE z.ZANR = 1;
主要问题是如何在映射中指定这两个连接条件。
表 a 的实体如下所示:
public class EntityA
{
public virtual long Id { get; set; }
public virtual int Number { get; set; }
public virtual string Name { get; set; }
}
名称应映射到 table_c.TDTEXT 列。
我到目前为止的映射是这样的:
public class EntityAMap : ClassMap<EntityA>
{
public EntityAMap()
{
Table("PUB.table_a");
Id(x => x.Id).Column("ID");
Map(x => x.Number).Column("ZANR");
}
}
我尝试使用与How to join table in fluent nhibernate 中相同的策略映射第一个连接,但这不起作用,因为我没有从 table_a 到 table_b 的直接引用,唯一连接它们的是常数 602 (参见上面的 SQL 查询)。
我没有找到以某种方式在映射中指定该常量的方法。