1

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

奇怪的要求是:对于给定的产品,如果翻译后的产品描述不存在以用户的语言,则回退到英语。

如前所述,这可能看起来并不奇怪,但我正在努力映射它。在几次错误的开始之后,我在 SQL 中创建了一个视图,该视图基本上创建了和的交叉连接(笛卡尔积),ProductIdLanguageId与翻译表连接两次,一次用于所有翻译,一次用于英语子查询。从中,我使用 COALESCE() 提取翻译,以获取产品和语言代码的每种组合的翻译,必要时使用英语。所以基本上这个视图中的列ProductIdLanguageIdTranslation

我将如何映射这个?最重要的是,我该如何查询?我只需要能够从这个视图中读取数据。

显然这有点复杂。有没有更好的办法?

4

1 回答 1

1

这样的事情会做吗?

<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>

对于用户语言中没有描述的情况,只需检查条目是否在字典中即可。

public string GetDescription(string language)
{
    return LocalizedDescriptions.ContainsKey(language) ? LocalizedDescriptions[language] : Description;
}
于 2013-01-16T10:41:53.833 回答