12

Fluent NHibernateはこれを嫌い、エラーをスローします。

{"関連付けはマップされていないクラスを参照します:System.String"}

OK、これで問題が発生する理由はわかりますが、最善の解決策は何ですか?

区切られた文字列のリストを単一のフィールドに格納することは本当に望ましくありません。リストに多くの文字列が含まれていると、これは醜くなります。

また、明らかな理由から、テーブルの「文字列」は必要ありません。

クラスの中に包むことでこれを解決できると思いますList<string>が、これは少し重い感じがします。しかし、私はそれが最善の解決策だと考え始めています。

Fluent NHibernateにこれを処理させるための最良の方法は何ですか?

これらの値が別のテーブルに格納されることを完全に期待しています。NHibernateに指示する自動マッピング規則を設定できたのではないかと思いました。'class Xを含むが表示された場合はList<*some primitive type*>、先に進んで、このコレクションにマップする参照テーブルを自動的に作成してください。

クラス内のすべてのコレクションをラップするのは少し重いと感じます。ただし、それが最善の解決策である場合は、そうしてください。

4

3 に答える 3

7

数週間前に、文字列の代わりにフロートを使用して、まったく同じ問題が発生しました。

how-do-you-automap-listfloat-or-float-with-fluent-nhibernate

自動マッピングはプリミティブ型では機能しないことがわかりました。

編集-これはもはや真実ではありません-FNHチームは問題を修正しました

私の質問に対する受け入れられた回答には多くのサンプルコードがありますが、重要な点は、プリミティブ型のリスト(以下の例では「RawY」)にオーバーライドを追加することです。

public class DlsAppOverlordExportRunData
{
    public virtual int Id { get; set; }
    // Note: List<float> needs overrides in order to be mapped by NHibernate.
    // See class DlsAppOverlordExportRunDataMap.
    public virtual IList<float> RawY { get; set; }
}


// Must be in different namespace from DlsAppOverlordExportRunData!!!
public class DlsAppOverlordExportRunDataMap : IAutoMappingOverride<DlsAppOverlordExportRunData>
{
    public void Override(AutoMapping<DlsAppOverlordExportRunData> mapping)
    {
        // Creates table called "RawY", with primary key
        // "DlsAppOverlordExportRunData_Id", and numeric column "Value"
        mapping.HasMany(x => x.RawY)
               .Element("Value");
    }
}

同じアプローチが文字列のIListsで機能することを期待します。

于 2009-12-22T22:04:46.197 に答える
4

最初の回答を投稿してから、Fluent NHibernate チームがこの問題を修正しました。

C# 値型 (string、int、float など) の IList を自動マップできるようになりました。

最新バージョンの FNH を使用していることを確認してください。

于 2010-10-04T23:12:28.990 に答える
1

このように考えてください...休止状態なしでどのようにしますか? おそらく、外部キーと文字列の列を持つテーブルがあるでしょうか? では、Hibernate でそれを行うにはどうすればよいでしょうか。多対一の文字列プロパティを持つ別のクラスをセットアップします。次に、そのクラスのコレクションをマップします。

于 2009-12-21T22:39:20.027 に答える