2011-04-29 137 views
6

我有使用Fluent NHibernate映射的字典。该字典有一个复杂的密钥类型CultureInfo。我的数据库不能存储该类型,所以我想使用它的字符串表示。如何使用FluentNHibernate映射复杂键类型(CultureInfo)的字典

在字典映射以外的映射中,我可以使用用户类型约定成功映射CultureInfo -properties。现在我想知道如何做二元映射。

下面是一个包含词典中的实体:

public class MultilingualPhrase : Entity 
{ 
    private IDictionary<CultureInfo, string> languageValues; 

    public virtual IDictionary<CultureInfo, string> LanguageValues 
    { 
     get 
     { 
      return languageValues; 
     } 
    } 
} 

下面是该实体的自动映射覆盖:

public void Override(AutoMapping<MultilingualPhrase> mapping) 
{ 
    mapping 
     .HasMany(n => n.LanguageValues) 
     .Access.ReadOnlyPropertyThroughCamelCaseField() 
     .AsMap<string>("CultureName") 
     .Element("Phrase") 
     .Table("MultilingualPhraseValues"); 
} 

这种映射(显然)导致以下错误:

Failed to convert parameter value from a CultureInfo to a String.

我知道NHibernate有一个类型自定义类型实现CultureInfo(我正在使用它来映射属性),但我如何在我的映射覆盖中指定它?

回答

1

这NH 3.1正常工作与FNH类映射(不知道自动映射)和FNH 1.2:

HasMany(n => n.LanguageValues) 
    .Access.ReadOnlyPropertyThroughCamelCaseField() 
    .AsMap<CultureInfo>("CultureName") 
    .Element("Phrase") 
    .Table("MultilingualPhraseValues"); 
+0

美妙,我想我是太专注于明确的类型上AsMap作为目标类型,而不是源类型。谢谢! – 2011-05-06 09:33:30