Fluent nhibernate Fluent NHibernate和带有索引器映射的类

Fluent nhibernate Fluent NHibernate和带有索引器映射的类,fluent-nhibernate,nhibernate-mapping,Fluent Nhibernate,Nhibernate Mapping,如何使用Fluent映射将类属性集映射到Fluent NHibernate public class AttributeSet : DictionaryBase { private readonly Dictionary<string, object> _cache; public AttributeSet() { _cache = new Dictionary<string, object>(); } publ

如何使用Fluent映射将类属性集映射到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; }
}
公共类属性集:字典库
{
专用只读字典\u缓存;
公共属性集()
{
_cache=新字典();
}
公共对象[字符串索引]
{
得到
{
返回_缓存[索引];
}
设置
{
_缓存[索引]=值;
}
}
}
公共类实体
{
受保护实体()
{
属性=新属性集();
}
公共虚拟整数Id{get;set;}
公共虚拟字符串标签{get;set;}
公共虚拟字符串描述{get;set;}
公共虚拟日期时间CreatedDate{get;set;}
公共虚拟属性集属性{get;set;}
}

我认为没有直接映射索引器的方法,但是您可以公开底层字典类型并映射它

如果不想将字典公开为公共,可以将其映射为私有属性,而不是作为公共属性。对于映射字典

一个例子可能是

HasMany<object>(Reveal.Member<AttributeSet>("Cache"))
    .KeyColumn("AttributeSetId")
    .AsMap<string>(idx => idx.Column("Index"), elem => elem.Column("Value"))
    .Access.CamelCaseField(Prefix.Underscore)
HasMany(leaver.Member(“缓存”))
.KeyColumn(“AttributeSetId”)
.AsMap(idx=>idx.Column(“索引”),elem=>elem.Column(“值”))
.Access.CamelCaseField(前缀.下划线)

在字典中映射对象类型可能很有趣,我不知道NHibernate是否能够将其直接转换为基础数据库类型。

我认为没有办法直接映射索引器,但您可以公开基础字典类型并将其映射

如果不想将字典公开为公共,可以将其映射为私有属性,而不是作为公共属性。对于映射字典

一个例子可能是

HasMany<object>(Reveal.Member<AttributeSet>("Cache"))
    .KeyColumn("AttributeSetId")
    .AsMap<string>(idx => idx.Column("Index"), elem => elem.Column("Value"))
    .Access.CamelCaseField(Prefix.Underscore)
HasMany(leaver.Member(“缓存”))
.KeyColumn(“AttributeSetId”)
.AsMap(idx=>idx.Column(“索引”),elem=>elem.Column(“值”))
.Access.CamelCaseField(前缀.下划线)
在字典中映射对象类型可能很有趣,我不知道NHibernate是否能够将其直接转换为底层数据库类型