我正在尝试设置一组数据模型,如下所示:
[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?我怎样才能实现一个能满足我需求的模型呢?
由于
约什
答案 0 :(得分:1)
尝试Locale的程序集限定名,即:“NameSpace.For.Locale,LocaleAssembly”
您是否尝试过未指定索引类型? ActiveRecord应该从IDictionary&lt;&gt;
的泛型参数中选择类型答案 1 :(得分:0)
不幸的是,似乎目前无法使用Castle.ActiveRecord对所描述的关系进行建模,因为它不支持NHibernate需要理解的所需参数。