0

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

[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:{“无法确定类型:区域设置,用于列:NHibernate.Mapping.Column(Locale)”} System.Exception {NHibernate.MappingException}

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

有谁知道如何正确使用这个 RelationType.Map 和 IndexType ?我怎样才能获得一个可以满足我要求的模型?

谢谢

乔什

4

2 回答 2

1

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

您是否尝试过不指定索引类型?ActiveRecord 应该从 IDictionary<> 的通用参数中获取类型

于 2012-05-23T08:03:33.360 回答
0

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

于 2012-06-27T02:15:38.193 回答