4

私は 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 の機能の同等性に向けて着実に取り組んでいると言及されています。このツールの評価と使用を支援するために、これらの欠落している機能のリストはどこかにありますか?

事前に助けに感謝します。

4

3 に答える 3

1

私はジェームズ・グレゴリーに直接メールで同じ質問をしました。彼はこの素晴らしい応答を提供しました。

「ねえポール、

1) KeyColumnNames はあなたが求めているものです。

2) 3 つの方法のうちの 1 つを行うことができます。IHasManyConvention をセットアップして、すべてのリレーションシップをグローバルにカスケードし、ForTypesThatDeriveFrom 呼び出しを使用するか、自動マッピング オーバーライドを使用します。

3) 現在、1.0 リリースの非公開テストを行っています。パブリック ベータ版があるのか​​、すぐにリリースされるのかはわかりませんが、今後数週間以内にリリースされる予定です。

4) NHibernate で完全な機能が完成する可能性はほとんどありません。そうなりたいとは思っていません。NH 機能の多くは非常に難解であり、それらを実装するメリットはほとんどありません。1.0 の時点で、人々が定期的に使用する、サポートされていない機能はほとんどありません。すべての一般的なマッピング シナリオに対応していると自信を持って言えます。そうでないものがあれば、いつでも hbm に戻ることができます。

私たちのドキュメントが古くなっているというコメントを先取りするために、ドキュメントは 1.0 に向けてオーバーホールされる予定です ;)

ジェームス

ありがとうジェームズ。

于 2009-08-09T23:46:30.970 に答える
0

Fluentプロジェクトのリリース予定日はありますか?私は(他の多くの人と同じように)これは優れたイニシアチブだと感じていますが、安定した状態でない限り、それを使用することを心がけています。

これで、SVNリポジトリからFluentnHibernateの動作バージョンを入手できるはずです。彼らはまた、バイナリをコンパイルしました。

現在、FluentNHibernateの公式リリースはありません。これは品質を反映したものではなく、私たちの急速な変化を反映したものです。私たちのコードベースは毎日更新されているため、NHibernate Coreと同等の機能を実現するまで、公式リリースを出すことは無意味な努力になります。日常的に使用する通常の機能のほとんどは準備ができています。

http://fluentnhibernate.org/downloads

現在の問題はここにあります:

http://code.google.com/p/fluent-nhibernate/issues/list

それらのどれも取引キラーではないようです。どれだけの時間を実験しなければならないかによると思います。

于 2009-08-07T03:05:14.913 に答える
0

オブジェクトは保存されていない一時インスタンスを参照しています - フラッシュする前に一時インスタンスを保存してください。タイプ: FluentNHibernateTesting.Entities.Employee、エンティティ: FluentNHibernateTesting.Entities.Employee

Googleオブジェクトが保存されていない一時的なインスタンスを参照している場合、これに一致するものがいくつか見つかります。あなたの最善の策は、これらとトラブルシューティングを開始することです. 逸話として、私が読んだ限りでは、エラー メッセージがまさにその内容を意味しているように聞こえます。または、更新されていない多対多またはカスケード関係があるようです。

于 2009-08-07T03:28:28.840 に答える