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: {"Could not determine type for: Locale, for columns: NHibernate.Mapping.Column(Locale)"}

これは、"IndexType" が "Locale" に設定されているためです..しかし、何に設定すればよいのでしょうか? 完全な名前空間を Locale の先頭に追加しようとしましたが、うまくいきませんでした。また、登録時に自然に機能する文字列と int に設定しようとしましたが、ロケールを文字列または整数に変換できないため、実際にオブジェクトを使用しようとすると失敗します。

この 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 に答える