サンプル プログラムが正常に動作するようになったので、Fluent NHibernate を使用して実際の作業を開始します。プロジェクトのクラス階層で Automapping を使用しようとしています。
これは科学計測アプリケーションであり、マッピングしているクラスには、float の配列であるいくつかのプロパティがあります。
    private float[] _rawY; 
    public virtual float[] RawY 
    { 
        get 
        { 
            return _rawY; 
        } 
        set 
        { 
            _rawY = value; 
        } 
    } 
これらの配列には、最大 500 個の値を含めることができます。
自動マッピングが配列で機能するとは思っていませんでしたが、とにかく試してみて、最初はある程度成功しました。各配列は (SQLite を使用して) BLOB に自動マップされ、実行可能なソリューションのように見えました。
最初の問題は、配列を含むオブジェクトで SaveOrUpdate を呼び出そうとしたときに発生しました。「float [] の永続化がありません」という例外が発生しました。
だから私の次の考えは、すべての配列を IList に変換することでした。
public virtual IList<float> RawY { get; set; } 
しかし、今私は得る:
NHibernate.MappingException: Association references unmapped class: System.Single 
Automapping は複雑なオブジェクトのリストを処理できるため、基本型のリストをマップできないとは思いもしませんでした。しかし、解決策のためにいくつかのグーグルを行った後、これは事実のようです。一部の人々は問題を解決したようですが、私が見たサンプル コードは、私が今持っているよりも多くの NHibernate の知識を必要とします - 私はそれを理解していませんでした。
質問:
1. Automapping でこれを機能させるにはどうすればよいですか?
2. また、このアプリケーションでは配列とリストのどちらを使用するのが良いですか?
必要に応じて、どちらかを使用するようにアプリを変更できます (リストの方が好きですが)。
編集:
Mapping Collection of Stringsのコードを調べたところ、ソースに文字列の IList を設定するテスト コードがあることがわかりました。
public virtual IList<string> ListOfSimpleChildren { get; set; }
[Test] 
public void CanSetAsElement() 
{ 
    new MappingTester<OneToManyTarget>() 
        .ForMapping(m => m.HasMany(x => x.ListOfSimpleChildren).Element("columnName")) 
        .Element("class/bag/element").Exists(); 
} 
したがって、これは純粋な Automapping を使用して可能であるに違いありませんが、おそらく NHibernate で手動でマッピングするための必要な知識がないため、何も機能させることができませんでした。
誰かが私に方法を教えてくれない限り、これをハックする必要があると考え始めています (float の配列を単一の文字列としてエンコードするか、単一の float を含むクラスを作成し、それをリストに集約します)。それを適切に。
編集を終了
これが私の CreateSessionFactory メソッドです。それが返信の作成に役立つ場合...
    private static ISessionFactory CreateSessionFactory() 
    { 
        ISessionFactory sessionFactory = null; 
        const string autoMapExportDir = "AutoMapExport"; 
        if( !Directory.Exists(autoMapExportDir) ) 
            Directory.CreateDirectory(autoMapExportDir); 
        try 
        { 
            var autoPersistenceModel = 
                AutoMap.AssemblyOf<DlsAppOverlordExportRunData>() 
                       .Where(t => t.Namespace == "DlsAppAutomapped") 
                       .Conventions.Add( DefaultCascade.All() ) 
                ; 
            sessionFactory = Fluently.Configure() 
                .Database(SQLiteConfiguration.Standard 
                              .UsingFile(DbFile) 
                              .ShowSql() 
                         ) 
                .Mappings(m => m.AutoMappings.Add(autoPersistenceModel) 
                                             .ExportTo(autoMapExportDir) 
                         ) 
                .ExposeConfiguration(BuildSchema) 
                .BuildSessionFactory() 
                ; 
        } 
        catch (Exception e) 
        { 
            Debug.WriteLine(e); 
        } 
        return sessionFactory; 
    }