NHibernate查询多对多

NHibernate查询多对多,nhibernate,model-associations,Nhibernate,Model Associations,我有一个奇怪的要求。简而言之,我有一个产品表和一个语言表。每个产品都包含一个英文字符串描述。在我的应用程序中,我需要用用户确定的15种语言之一显示描述。每个产品都包含一个IDictionary,其中包含按语言索引的本地化描述。所有产品都有英文描述,但并非所有产品都在同一时间点翻译成所有15种语言 奇怪的要求是:对于给定的产品,如果用户语言中不存在翻译后的产品描述,请使用英语 如前所述,这似乎并不奇怪,但我正在努力绘制这张地图。在几个错误的开始之后,我在SQL中创建了一个视图,它基本上创建了Pro

我有一个奇怪的要求。简而言之,我有一个产品表和一个语言表。每个产品都包含一个英文字符串描述。在我的应用程序中,我需要用用户确定的15种语言之一显示描述。每个产品都包含一个
IDictionary
,其中包含按语言索引的本地化描述。所有产品都有英文描述,但并非所有产品都在同一时间点翻译成所有15种语言

奇怪的要求是:对于给定的产品,如果用户语言中不存在翻译后的产品描述,请使用英语

如前所述,这似乎并不奇怪,但我正在努力绘制这张地图。在几个错误的开始之后,我在SQL中创建了一个视图,它基本上创建了
ProductId
LanguageId
的交叉联接(笛卡尔积),并与翻译表联接两次,一次用于所有翻译,一次用于英文子查询。在此基础上,我使用COALESCE()提取了一个翻译,以获得产品代码和语言代码的每个组合的翻译,如果需要,使用英语。因此,该视图中的列基本上是
ProductId
LanguageId
Translation

我该如何绘制这张地图?最重要的是,我如何质疑这一点?我只需要能够从这个视图中读取数据


显然这有点复杂。有更好的方法吗?

像这样的方法行吗

<class name="Product" table="products">
  <id name="Id">  
    <generator class="native"/>  
  </id>  
  <property name="Description" />

  <map name="LocalizedDescriptions" table="descriptions">
    <key column="product_id"/>  
    <index column="language" type="String" />  
    <element column="description" type="String" />  
  </map>
</class>

像这样的东西行吗

<class name="Product" table="products">
  <id name="Id">  
    <generator class="native"/>  
  </id>  
  <property name="Description" />

  <map name="LocalizedDescriptions" table="descriptions">
    <key column="product_id"/>  
    <index column="language" type="String" />  
    <element column="description" type="String" />  
  </map>
</class>

我知道你在做什么,我想我可能引起了一些混乱。作为产品一部分的“说明”只是管理员用来区分一种产品和另一种产品的简要说明。要显示给最终用户的回退值实际上在一行的“说明”中,使用英语。OK,但想法保持不变。除了管理员使用的描述之外,只需从“描述”中返回英语描述。确定。正如我提到的,这是一个问题的简化陈述,但您的解决方案是有效的。我努力的地方是在任何需要的地方实现这一点。我最终创建了一个帮助程序来封装逻辑,类似于您推荐的逻辑,现在在所有地方都可以使用。我知道您在做什么,我想我可能造成了一些混乱。作为产品一部分的“说明”只是管理员用来区分一种产品和另一种产品的简要说明。要显示给最终用户的回退值实际上在一行的“说明”中,使用英语。OK,但想法保持不变。除了管理员使用的描述之外,只需从“描述”中返回英语描述。确定。正如我提到的,这是一个问题的简化陈述,但您的解决方案是有效的。我努力的地方是在任何需要的地方实现这一点。我最终创建了一个助手来封装与您建议的逻辑相似的逻辑,现在这在任何地方都起作用。如果您真的接受提供给您的答案,这将有助于其他人帮助您。如果您真的接受提供给您的答案,这将有助于其他人帮助您。