NHibernate查询多对多
我有一个奇怪的要求。简而言之,我有一个产品表和一个语言表。每个产品都包含一个英文字符串描述。在我的应用程序中,我需要用用户确定的15种语言之一显示描述。每个产品都包含一个NHibernate查询多对多,nhibernate,model-associations,Nhibernate,Model Associations,我有一个奇怪的要求。简而言之,我有一个产品表和一个语言表。每个产品都包含一个英文字符串描述。在我的应用程序中,我需要用用户确定的15种语言之一显示描述。每个产品都包含一个IDictionary,其中包含按语言索引的本地化描述。所有产品都有英文描述,但并非所有产品都在同一时间点翻译成所有15种语言 奇怪的要求是:对于给定的产品,如果用户语言中不存在翻译后的产品描述,请使用英语 如前所述,这似乎并不奇怪,但我正在努力绘制这张地图。在几个错误的开始之后,我在SQL中创建了一个视图,它基本上创建了Pro
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,但想法保持不变。除了管理员使用的描述之外,只需从“描述”中返回英语描述。确定。正如我提到的,这是一个问题的简化陈述,但您的解决方案是有效的。我努力的地方是在任何需要的地方实现这一点。我最终创建了一个助手来封装与您建议的逻辑相似的逻辑,现在这在任何地方都起作用。如果您真的接受提供给您的答案,这将有助于其他人帮助您。如果您真的接受提供给您的答案,这将有助于其他人帮助您。