私は NHibernate を初めて使用しますが、その構成の側面は常に私にとって非常に面倒に思えました。昨日、Fluent NHibernate の Auto Mapping 機能に出会い、適切な印象を受けました。
自分自身を教育するために、 AutoMappings と Conventions を使用して「Getting Started First Project」( http://wiki.fluentnhibernate.org/show/GettingStartedFirstProject ) を試みるという課題を自分に課しました。運があまりないことを認めなければなりません。
私の手順を要約するには:
この例のデータベース スキーマに若干の変更を加えました。主に、外部キーからアンダースコア (Product_id から ProductId へ) を削除することです。これにより、データベースの命名基準がよりインラインになります。
Q1) 例として ForeignKeyConvention を使用して IHasManyConvention の実装を記述しようとしましたが、WithKeyColumn メソッドが存在しないようです (これは、昨日のビルドをダウンロードしたためであり、その後、記事が書かれてから設計が変更されたためだと思います)。これを修正するにはどうすればよいですか?
また、例のエンティティ レイヤーにいくつかのマイナーな変更を加えました。これにより、StoresStockedIn が Stores (Product.cs) に、Staff が Employees (Store.cs) に名前変更されました。
私のコードは次のようになります。
var cfg = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005
.ConnectionString(c => c
.Is(connectionString)))
.Mappings(m => m.AutoMappings.Add(
AutoPersistenceModel.MapEntitiesFromAssemblyOf<Store>()
.Where(t => t
.Namespace == "FluentNHibernateTesting.Entities")
.ConventionDiscovery.Setup(c => c.Add<ForeignKeyConvention>())
))
.BuildSessionFactory();
次に、開始例に従って、店舗、製品、および従業員をデータベースに追加してみます。私が得る例外はコミットで発生し、次のとおりです。
オブジェクトは保存されていない一時インスタンスを参照しています - フラッシュする前に一時インスタンスを保存してください。タイプ: FluentNHibernateTesting.Entities.Employee、エンティティ: FluentNHibernateTesting.Entities.Employee
Q2) この問題を解決するにはどうすればよいですか? オブジェクト関係のカスケード要素を正しく設定することと関係があることは(私の限られた読書から)理解していますが、自動マッピングを使用してこれを効果的に行う方法について少し困惑しています。
Q3) Fluent プロジェクトのリリース予定日はありますか? 私は (他の多くの人と同じように) これは優れたイニシアチブだと感じていますが、安定した状態でない限り使用することに注意を払っています。
Q4) 多くのブログで、hbn.xml と Fluent の機能の同等性に向けて着実に取り組んでいると言及されています。このツールの評価と使用を支援するために、これらの欠落している機能のリストはどこかにありますか?
事前に助けに感謝します。