問題タブ [mapping-by-code]
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.
c# - NHibernate 3.3: 複合外部キーを使用した多対多の関係のマッピング
コードシステムによるNHibernateの「セクシーな」マッピングを使用して、次の状況をマッピングする方法を見つけようとしています。運が悪いので、しばらくの間これを理解しようとしていたので、助けてください! コンポーネントを使用して複合キーを表しています。以下は、私がマッピングしようとしているテーブルです。
これが私の現在の試みです(まったく機能していません!)
アカウント:
カード:
これが可能であることを教えてください!
c# - NHIbernateの式でプロパティマッピングを使用する
プロパティを別のテーブルの任意の列にマップしようとしています。ドキュメントによると、式は任意のSQLである可能性があり、私が見た例も同様です。
ただし、NHibernateが生成するSQLは有効ではありません。数式のSQLステートメント全体がステートメントの途中に挿入されていSELECT
ます。
c# - コードによるマッピングを使用した NHibernate での単一列の結合
Item と ItemContent の間の次の関係を考えてみましょう。
アイテム
ItemId
ItemName
ItemContent
ContentId
ItemId
コンテンツ
ContentType
私がやりたいことはContent
、マッピング自体で提供されるか、他の方法で注入される ContentType に基づいて ItemContent から Content 列を結合する Item のプロパティを持つことです。
これを達成するための最良の方法は何ですか?これを達成する最も簡単な方法は何ですか?
c# - NHibernate 3.3: コードによるマッピングの Id でタイプを Ansistring に設定する
次のエンティティをそのままマッピングしています。
コメント アウトされたコードでわかるように、コンポーネントを Id として使用する場合、NHibernateUtil を使用して型を AnsiString として設定できます。ただし、プレーンな Id マッピングで何をすべきかわかりません。
を使用してみnew NHibernate.Type.AnsiStringType()
ましたが、コンストラクターが定義されていないことに不満があります。
アイデアはありますか?
nhibernate - サブクラスの複数の層を nhibernate エンティティにマップする方法 (bycode を使用)?
いくつかのマッピングをセットアップしようとしていますが、この例外が発生しています:
マップされていないクラスを拡張できません: CommonEntity
[MappingException: マップされていないクラスを拡張できません: CommonEntity]
NHibernate.Cfg.XmlHbmBinding.ClassBinder.GetSuperclass(String extendsName) +217
NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.AddEntitiesMappings(HbmMapping mappingSchema, IDictionary`2 inheritedMetas) +352
NHibernate.Cfg.XmlHbmBinding .MappingRootBinder.Bind(HbmMapping mappingSchema) +85
NHibernate.Cfg.Configuration.AddDeserializedMapping(HbmMapping mappingDocument, String documentFileName) +156
私は3つのクラスを持っています。Entity、CommonEntity、および User。エンティティまたは共通エンティティ テーブルはなく、ユーザー テーブルのみです。ユーザーは CommonEntity から継承し、CommonEntity は Entity から継承します。Entity と CommonEntity は抽象的です。
このマッピングを定義しました:
これは次のように使用されます:
User と CommonEntity の両方が「types」配列にあります。CommonEntity のマッピングも追加しようとしましたが、違いはありませんでした。
また、クラスの代わりにサブクラスを呼び出してみました。User を Entity から直接継承すると、すべて正常に動作します。何か助けはありますか?
nhibernate - nHibernate ByCodeマッピング-慣例によりManyToManyを完全にマッピングする方法は?
私はこのマッピングを定義しました:
私は多対多の関係に問題を抱えています。User、UserPermission、およびPermissionがあります。パーミッションをアタッチした後でユーザーを保存すると、次のSQLが生成されます。
次のようになります。
ユーザーに特定のクラスマッピングを追加すると、次のようになります。
キーとテーブルの定義を省略して、列を呼び出さずに多対多を含めることができ、機能します。しかし、それは私のBeforeManyToManyイベントハンドラーと同じことをします。クラス全体を削除すると、BeforeMapManyToManyイベントは発生せず、nHibernateはPermissionテーブルにUserIdがあると見なします。
Heresユーザー:
nhibernate - ConventionModelMapperはセット/バッグの関係をどのように決定しますか
新しいアプリケーションでコードによるマッピングを使用していますが、従来のモデルマッパーで奇妙な動作が見られます。私の1..N関係の1つを除いてすべてをバッグとして選択し、1つをセットとして選択しています。私が見る限り、それらはすべて基本的に同じ方法で宣言されています。さらに、BeforeMapSetのイベントハンドラーを設定しないと、適切なBeforeMapManyToOneハンドラーが起動されません。
c# - NHibernate Schema Export が間違ったテーブルを変更する (NH のバグの可能性?)
NHibernates スキーマ エクスポート機能を使用して、データベースを作成および更新します。
ただし、ときどき (低速のマシンでより頻繁に発生するようです) NHibernate は誤ったテーブル変更スクリプトを生成します。スキーマのエクスポートを無効にし、ステートメントをログに記録して問題をデバッグしました。
この問題はランダムに発生し、ランダムに異なるテーブルに影響します。
スクリプトの例は次のとおりです。alter table dbo.VlogNet_NumberGroups add DKS_P03_Artikelgruppe BIGINT
ただし、「DKS_P03_Artikelgruppe」列は完全に異なるマッピングに属しており、さらに悪いことに、このマッピングは に構成されていますNHibernate.Mapping.ByCode.SchemaAction.None
。
編集: 私の質問を明確にするために: NHibernate が異なるマッピングをランダムに混同し、データベースを破壊するテーブル コマンドを変更するのはなぜですか。
マッピング:
HierachicalEntityMap<T>
から派生しClassMapping<T>
、いくつかのプロパティ (ID、名前、親) を追加し、TableName を対応するプロパティの値に設定するだけです。
フィールドは、次のDKS_P03_Artikelgruppe
マッピングに由来します。
NHibernate SessionFactory をセットアップするコード:
oracle - NHibernateのコードによるマッピングがOracleで大文字と小文字を区別するテーブル名を無視するのはなぜですか?
NHibernate3.3.2.4000でOracleデータベースを使用しています。
テーブルからエンティティコレクションを選択できることを確認するために単体テストを設定しています。外観は次のとおりです。
OAuthMembershipsコレクションをフェッチする行は、次の例外をスローしています。
クエリを実行出来ませんでした
[bckgrd_booklet_app.OAuthMembershipoauthmembe0_からid13_としてoauthmembe0_.idを選択します]
[SQL:bckgrd_booklet_app.OAuthMembershipoauthmembe0_からid13_としてoauthmembe0_.idを選択します]
私のOAuthMembershipクラスとマッピングは以下のとおりです。ご覧のとおり、テーブル名を「OAUTH_MEMBERSHIP」として定義していますが、生成されたSQLには、代わりにキャメルケースのクラス名が含まれています。テーブル名の規則が定義されていません。NHibernateがOracleで大文字と小文字を区別するテーブル名を無視するのはなぜですか?
これが私のNHibernateSessionFactoryです。
私のActiveSessionManager:
UnitOfWork定義の関連部分:
nhibernate - コードによるマッピングに変換すると、重大なパフォーマンスの問題が発生する
マッピング構成ファイルを使用する NHibernate プロジェクトがあります。SQL Server データベースを使用しています。
コードによるマッピングに切り替えたい。私のアプローチは、一度に 1 つのクラスを実行し、切り替えごとにすべてのテストに合格することを確認することです。
2 つのマッピングを混在させるのは非常に簡単です。
しかし、Schedule
マッピングをコードごとのマッピングに変更したとき、重大なパフォーマンスの問題が発生しました。の呼び出しにSession.Flush
は 12 秒かかりますが、これはごくわずかな量のテスト データを超えています。
XML マッピングに戻すと、パフォーマンスの問題はなくなりました。
他の誰かが問題を経験しましたか?
schedule
明らかな欠陥がある場合に備えて、の前後のマッピングを含めます。
構成ファイル経由:
コードによるマッピング:
後で編集
Flush
トランザクション内で呼び出さないことで問題を解決しました。
問題を再現するために、より単純なテスト コードを作成しようとしましたが、うまくいきませんでした (Flush を何度呼び出しても、すべてのテスト コードは非常に高速に実行されます)。これは、一部のエンティティのキー生成を から に変換したことが原因である可能性がありIdentity
ますHiLo
。
私の場合、私のコードは問題を引き起こした特定の構成を作成していたようです。
推測すると、問題を引き起こす構成には、実行時間の長いトランザクションの軽率な使用と ID キーの生成の組み合わせが含まれていると言えます。