問題タブ [nhibernate-mapping]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
591 参照

.net - NHibernateセットマッピングはDRYではありませんか?

私は上級のNHibernateユーザーではないので、これはいくぶん重要かもしれません、そして私はまだそれを発見していませんでした。

クラスについて考えてみましょう。

NHibernate Set要素を指定する場合、次のように記述するだけでは不十分です。

代わりに、少なくとも次のように書く必要があります。

これはDRYの原則に違反しているようです。Setの場合、デフォルトは1対多の関係である必要があります。クラスはコレクションのジェネリック型から推測する必要があり、キー列として、コレクション要素のクラスの主キーを使用する必要があります。

これは私には合理的なデフォルトのように思えます。それでは、なぜNHiberbateはそれについて賢くなく、これらの余分な3行を入力する必要があるのでしょうか。

0 投票する
1 に答える
426 参照

c# - クラスをそれ自体と1対1でマッピングするNhibernate

クラス (Module という名前) が、その前身である Module オブジェクトに関連する場合と関連しない場合がある関係を定義したい状況があります。先行はゼロまたはまったく存在しない可能性があります。クラスは次のようになります。

そして、Predecessor が次のように Module 型のプロパティになるようにマッピングを定義しました。

ただし、タイプ「モジュール」が見つからないため、マッピングがコンパイルできないという苦情が寄せられています。クラスの長い名前を試しました

クラスの完全修飾名

無駄に。私の質問は:

これを適切にマッピングしていますか? そうでない場合は、どうすれば適切にマッピングできますか?

0 投票する
3 に答える
14698 参照

c# - Hibernate の 1 対多のマッピングの問題

外部キー関係を持つ 2 つの単純なテーブルをマップする必要があります。テーブルの 1 つは、列id (int 型の主キー)、nameaddress、およびguid (新しく追加され、主キーではありません) を含むContactです。もう 1 つは、列id (int 型のプライマリ キー)、contact___ id (contact テーブルの id の外部キー)、およびphone__numberを含む phone__numberです。

Contact テーブルのマッピング ファイルは次のとおりです。

Phone_number テーブルのマッピング ファイルは次のとおりです。

Contact および PhoneNumber クラスは次のとおりです。

contact と phone_numbers を別々にロードすると動作しますが、set 要素を追加して 1 対多の関係を取得した後、nhibernate でエラーが発生します:

NHibernate.MappingException: タイプ OfflineDbSyncWithNHibernate.Models.Contact に指定されたマッピング情報が無効です。プロパティ タイプの不一致についてマッピング ファイルを確認してください

私は nHibernate を初めて使用するので、set 要素に誤りがあるのか​​、それとも使用すべきではないのかわかりません。どんな助けでも大歓迎です。

0 投票する
1 に答える
3184 参照

c# - NHibernateで外部キー関係を持つ2つのテーブルをマップする方法は?

ContactPhone__numberの 2 つのテーブルがあります。Phone_number には、 Contactテーブルのid への外部キーである列 contact_id が含まれています。Nhibernate でこれら 2 つのテーブルをマップして、連絡先クラスで PhoneNumbers のリストを取得するにはどうすればよいですか。

0 投票する
1 に答える
1209 参照

c# - DLL 間の NHibernate Fluent 自動マッピング

1 つのプロジェクト/dll に Person クラスがあり、別のプロジェクト/dll に Person から派生した StandardUser クラスがあります。StandardUser を含む Password クラスがあります (Password と StandardUser は同じ dll にあります)。

このシナリオで流暢な自動マッピングを機能させることができないようです。

それは私に伝えます:NHibernate.MappingException:テーブルパスワードからの関連付けは、マップされていないクラスを参照しています:DomainModel.Users.DomainObjects.StandardUser

Person クラスを StandardUser と同じ dll に移動すると、機能します。Password に StandardUser ではなく Person が含まれている場合にも機能します。

何か不足していますか、それとも Fluent Automappings ではサポートされていませんか?


編集/回答:基本クラスをマップする前に、AutoMappings.Add で StandardUser のアセンブリをマップする必要があるようです。これが仕様によるものなのかバグなのかはわかりません。

0 投票する
2 に答える
787 参照

nhibernate - NHibernate で 1 つのプロパティに対してカスタム SQL を実行する

私が理解しているように、NHibernate にはタイムスタンプのサポートが組み込まれています。ただし、プロパティを更新しないか、常に更新するようにNHibernateに指示することしかできないようです。

私が現在取り組んでいるプロジェクトには、" created_time" と " updated_time" の両方を持ついくつかのテーブルがあり、どちらもデータベースによって生成されます。

NHibernate に " " の挿入のみのプロパティと " " の挿入および更新のgetdate()両方のプロパティに対して" " を使用するように指示する方法がわかりません。created_timeupdated_time

これは可能ですか?

PS: 私はレガシー データベースを使用しており、それを変更することは許可されていないため、トリガーなどは可能な解決策ではありません。

0 投票する
2 に答える
3751 参照

nhibernate - NHibernate fetch="join" マッピング属性が機能していないように見える

辞書を NH でマッピングします。宣言は次のとおりです。

単一の SQL クエリが生成されることを期待していますが、代わりに 2 つ取得します。実際のオブジェクトの選択と、それに続くディクショナリのコンテンツの選択です。

何か案は?

0 投票する
3 に答える
7461 参照

c# - NHibernate でマップされていない列をクエリする

NHibernate を使用してテーブルにマップされたクラスがあります。問題は、一部のプロパティのみがテーブルの列にマップされていることです。表示に使用する列のみがマップされているため、これで問題ありませんが、クラスのプロパティにマップされていないテーブル内の他の列に対してクエリを実行する方法があるかどうか疑問に思っていました。

たとえば、次の列を持つテーブルがあります。

オブジェクトがあります

andnamecustomerIdはマップされDateCreatedますが、どこにも表示しないからではありません。Customer特定の日付までに作成された顧客のテーブルをクエリしたいと思います。をマッピングせずにこれを行う方法はありますDateCreatedか? また、基準 API を使用してこれを行うことをお勧めします。

0 投票する
2 に答える
1080 参照

xml - NHibernate マッピングのジェネリック クラス

NHibernate でジェネリック クラスのマッピング ファイルを作成するにはどうすればよいですか。クラス Foo があるとします。マッピング ドキュメントではどのように表示されますか? クラス名="mydll.Foo ???? , mydll" ...

それが Foo だったら、次のようになります: class name="mydll.Foo`1[[mydll.Fee, mydll]], mydll"

class name="mydll.Foo`1[[mydll.Fee, mydll],[mydll.Fi, mydll]], mydll" (試してみましたが、うまくいきませんでした。