Свободный NHibernate и класс с отображением индексатора - PullRequest
1 голос
/ 10 декабря 2010

Как я могу сопоставить класс AttributeSet с 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 Ответ

1 голос
/ 19 января 2011

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

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

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

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

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

...