如何在Castle.ActiveRecord中使用HasAndBelongsToMany和Dictionary

时间:2012-05-23 07:28:41

标签: c# nhibernate activerecord

我正在尝试设置一组数据模型,如下所示:

[ActiveRecord, JoinedBase]
public class Locale : DataType
{
    private int m_id;
    private String m_DisplayName;
    private String m_Code;

    public Locale() 
    {
    }

    [PrimaryKey]
    public override int Id
    {
        get { return m_id; }
        set { m_id = value; }
    }

    [Property]
    public String DisplayName
    {
        get { return m_DisplayName; }
        set { m_DisplayName = value; }
    }

    [Property]
    public String Code
    {
        get { return m_Code; }
        set { m_Code = value; }
    }
}

[ActiveRecord, JoinedBase]
public class LocaleStringInstance : DataType
{
    private int m_id;
    private String m_text;

    public LocaleStringInstance() 
    {
    }

    [PrimaryKey]
    public override int Id
    {
        get { return m_id; }
        set { m_id = value; }
    }


    [Property]
    public String Text
    {
        get { return m_text; }
        set { m_text = value; }
    }
}

[ActiveRecord(Lazy=true), JoinedBase]
public class LocaleString : DataType
{
    private int m_id;
    private IDictionary<Locale, LocaleStringInstance> m_LocaleStrings;

    public LocaleString() 
    {
    }

    [PrimaryKey]
    public override int Id
    {
        get { return m_id; }
        set { m_id = value; }
    }

    [HasAndBelongsToMany(typeof(LocaleStringInstance),
        RelationType.Map, ColumnRef="LS_Col_Ref", ColumnKey = "LocaleStringInstance_id", Table = "LocaleStringMapping", 
        RelationType = RelationType.Map, Cascade = ManyRelationCascadeEnum.AllDeleteOrphan,
        Lazy = true, Index = "Locale", IndexType= "Locale")]
    virtual public IDictionary<Locale, LocaleStringInstance> LocaleStrings 
    {
        get { return m_LocaleStrings; }
        set { m_LocaleStrings = value; }
    }
}

主要问题在于尝试在这里建模最后一个属性“LocaleStrings”。 我们的想法是,特定的LocaleString将为已定义的每个“区域设置”提供一个字符串。字典应该代表这一点。

不幸的是,当我尝试使用ActiveRecord注册这些类型时,我收到以下错误: ActiveRecordException:{“无法确定类型:Locale,列:NHibernate.Mapping.Column(Locale)”} System.Exception {NHibernate.MappingException}

这是因为“IndexType”设置为“Locale”..但它应该设置为什么?我已经尝试将完整的命名空间添加到Locale的开头,但是没有用。我也尝试过设置为string和int,这在注册过程中自然起作用,但是当我尝试实际使用该对象时失败,因为Locale无法转换为字符串或整数。

有谁知道如何正确使用此RelationType.Map和IndexType?我怎样才能实现一个能满足我需求的模型呢?

由于

约什

2 个答案:

答案 0 :(得分:1)

尝试Locale的程序集限定名,即:“NameSpace.For.Locale,LocaleAssembly”

您是否尝试过未指定索引类型? ActiveRecord应该从IDictionary&lt;&gt;

的泛型参数中选择类型

答案 1 :(得分:0)

不幸的是,似乎目前无法使用Castle.ActiveRecord对所描述的关系进行建模,因为它不支持NHibernate需要理解的所需参数。