次のようなデータモデルのセットをセットアップしようとしています:
[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: {"Could not determine type for: Locale, for columns: NHibernate.Mapping.Column(Locale)"}
これは、"IndexType" が "Locale" に設定されているためです..しかし、何に設定すればよいのでしょうか? 完全な名前空間を Locale の先頭に追加しようとしましたが、うまくいきませんでした。また、登録時に自然に機能する文字列と int に設定しようとしましたが、ロケールを文字列または整数に変換できないため、実際にオブジェクトを使用しようとすると失敗します。
この RelationType.Map と IndexType を適切に使用する方法を知っている人はいますか? 探していることを実行するモデルをどのように達成できますか?
ありがとう
ジョシュ