【发布时间】:2011-05-23 03:20:15
【问题描述】:
我有一个网站。本网站位于特定的时区并具有特定类型的 Internet 连接。这两个属性都存储在数据库的站点表中,作为单独查找表中记录的外键。我永远不会那样做,但我理解为什么(强制使用一组通用名称,提供稍微更小的数据库大小,在某些情况下允许标准化附加信息,并允许轻松检索值列表以用作DDL)。
我正在构建一个必须包含检索此信息的映射。我想避免必须为一个字段构建域对象和映射(在某些情况下,除了查找表的 ID 之外,仅此而已),所以我想将关系非规范化并只拥有对象上的字符串值。简单的目标。
问题是我尝试使用的 Join 假设 Site 表的主键在查找表的某处被引用;实际上,我们假设站点处于关系的“一方”,这是不准确的。以下是相关的映射线:
Id(x=>x.Id).Column("SiteID");
...
Join("lu_TimeZone", j =>
{
j.KeyColumn("TimeZoneID");
j.Map(x => x.TimeZone).Column("TimeZone");
});
生成的 SQL 包含连接:
FROM Site this_0_
inner join lu_TimeZone this_0_1_
on this_0_.SiteID=this_0_1_.TimeZoneID
*蜂鸣器* 抱歉,打错了,感谢您的参与。连接应该是:
FROM Site this_0_
inner join lu_TimeZone this_0_1_
on this_0_.TimeZoneID=this_0_1_.TimeZoneID
但是似乎没有办法告诉 Fluent 使用 KeyColumn 作为连接两侧的列名。反转映射以将 TimeZone 连接到 Site 是不可行的,因为从 Site 到其他查找表有多个连接。
【问题讨论】:
标签: c# nhibernate join fluent-nhibernate