2010-12-10 3 views
1

Как я могу сопоставить класс AttributeSet с Fluent NHibernate, используя свободно отображениеFluent NHibernate и класс с отображением индексатор

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

ответ

1

Я не думаю, что есть способ сопоставить индексатор напрямую, но вы можете подвергать базовый тип словаря и карта.

Если вы не хотите публиковать словарь как общедоступный, вы можете сопоставить его как частную собственность, а не как explained here. Для отображения словаря, see here.

Примером может быть

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

Отображение типа объекта в словаре может быть интересно, я не знаю, если NHibernate сможет перевести его непосредственно к основному типу базы данных.

Смежные вопросы