我正在尝试设置一组数据模型,如下所示:
[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 ?我怎样才能获得一个可以满足我要求的模型?
谢谢
乔什