【问题标题】:Another Fluent NH Joining question另一个 Fluent NH 加入问题
【发布时间】: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


    【解决方案1】:

    作为墓志铭,我最终做了两件事之一:

    • 对于只有一个字段可能感兴趣的表,我创建了一个以表 ID 为键的枚举,并使用自定义类型将它们映射为枚举。

    • 对于可能有多个值的表,我创建并映射了一个域对象。

    如果不将子表作为对象引用,则可能无法使上述连接行为正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多