2009-09-11 3 views

Répondre

2

Pour mapper une liste comme un dictionnaire:

HasMany(x => x.Customers) 
    .AsMap(); 

Je ne l'ai pas utilisé; donc je ne peux pas donner un exemple.

Demandez regard sur le wiki: Cached version of the page, Actual page J'ai donné la version en cache de la page que le site semble être en panne.

+0

Cela n'aide pas vraiment l'utilisateur. Certes, il était capable de rechercher la bonne méthode, mais l'utilisation de la méthode n'est pas évidente. – Sebazzz

6

En utilisant une simple relation de classe comme les suivantes:

public class Foo { 
    public virtual IDictionary<string, Bar> Bars { get; set; } 
} 

public class Bar { 
    public virtual string Type { get; set; } 
    public virtual int Value { get; set; } 
} 

Vous pouvez mapper ce avec Fluent NHibernate de cette façon:

mapping.HasMany(x => x.Bars) 
     .AsMap(x => x.Type); 

Bar.Type est utilisé comme champ clé dans la dictionnaire.

6
public class PersistedData 
{ 
    public virtual IDictionary<key, value> Dictionary { get; set; } 
} 

public class PersistedDataMap : ClassMap<PersistedData> 
{ 
    HasMany(x => x.Dictionary) 
      .Table("dict_table") 
      .KeyColumn("column_id") 
      .AsMap<string>("key") 
      .Element("value"); 
} 

Cela carte correctement Dictionary à la table dict_table et utiliser column_id pour l'associer à l'ID de base. Par ailleurs, si vous souhaitez utiliser Enum comme clé dans le dictionnaire, notez que NHibernate.Type.EnumStringType<MyEnum> peut être utilisé à la place de la chaîne dans .AsMap<string> pour utiliser la valeur de chaîne au lieu de l'ordinal.