2010-12-10 28 views
1

Comment puis-je mapper la AttributeSet classe avec Fluent NHibernate en utilisant une cartographie courammentCourant NHibernate et classe avec cartographie indexeur

public class AttributeSet : DictionaryBase 
{ 
    private readonly Dictionary<string, object> _cache; 

    public AttributeSet() 
    { 
     _cache = new Dictionary<string, object>(); 
    } 

    public object this[string index] 
    { 
     get 
     { 
      return _cache[index]; 
     } 
     set 
     { 
      _cache[index] = value; 
     } 
    } 
} 



public class Entity 
{ 
    protected Entity() 
    { 
     Attributes = new AttributeSet(); 
    } 

    public virtual int Id { get; set; } 
    public virtual string Label { get; set; } 
    public virtual string Description { get; set; } 
    public virtual DateTime CreatedDate { get; set; } 

    public virtual AttributeSet Attributes { get; set; } 
} 

Répondre

1

Je ne pense pas qu'il y ait un moyen de mapper votre indexeur directement, mais vous pouvez exposer type de dictionnaire sous-jacent et la carte qui à la place.

Si vous ne souhaitez pas exposer le dictionnaire en tant que public, vous pouvez le mapper en tant que propriété privée à la place explained here. Pour mapper un dictionnaire, see here.

Un exemple pourrait être

HasMany<object>(Reveal.Member<AttributeSet>("Cache")) 
    .KeyColumn("AttributeSetId") 
    .AsMap<string>(idx => idx.Column("Index"), elem => elem.Column("Value")) 
    .Access.CamelCaseField(Prefix.Underscore) 

cartographie du type d'objet dans le dictionnaire pourrait être intéressant, je ne sais pas si NHibernate sera en mesure de traduire directement à un type de base de données sous-jacente.