問題タブ [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 MappingByCode マップ カスケード オプション
Dictionary を持つ次のクラスがあります。
現在、このコードによってマッピングされています:
KeyMapping に別のカスケード オプションを設定し、ValueMapping に別のオプションを設定する方法を探しています。しかし、メインの「コレクションマッピング」でのみカスケードを見つけることができます
キーに Cascade.None が必要です。これは、アプリケーションの別の部分がそのエンティティを管理し、Value に Cascade.AllDeleteOrphan が含まれているためです。
MbC でそれを行うにはどうすればよいですか?
さらに、「CollectionMapping」のカスケードを設定すると、どのエンティティに反映されますか?
nuget で最新の Nhibernate を使用しています。
nhibernate - カスタム列の InnerJoin を使用した ManyToOne()
カスタム列を持つデータベース列でプロパティをマップする方法はありますか?それはFKではなく、単なる候補キー(テーブルに対して一意です)ですか?
そうでない場合、ここでのオプションは何ですか? select
(結合テーブルの制限で結果を制限する必要があります)
nhibernate - サブクラスごとの NHibernate テーブルが無意味な INSERT ステートメントになる - 何が間違っているのでしょうか?
次のエンティティがあります。
次の Hibernate Conformist マッピングを使用して、これらのエンティティをマッピングします。
はEnumCustomType
、IUserType
C# 列挙型を整数列にマップする です。
この設計とマッピングは、NHibernate のリファレンス ドキュメントとこのブログ (特定のページ) (概要) を参照して多くの調査と協議を行った後に策定しました。これは私が望んでいるエンティティの設計であると確信していますが、もちろん可能です (可能性は高いですか?) マッピングを間違えました。
NHibernate を起動して構成すると、マッピングが読み込まれ、文句は言われません。ログ出力には、マッピングに関する警告はありません。ただし、 を作成しPersonUser
、そのすべてのプロパティに値を割り当て、Add
それをに割り当てるとISession
、最も奇妙なことが起こります。
重要なのは、生成された SQL を見てください。
それは意味がありません。マッピングにはまったく対応していません。1 つのテーブルの挿入ステートメントで、3 つの異なるテーブルから列を取得しています。PersonUser
AND からの列がClientUser
あり (これはあり得ないことです)、存在しないパラメーター インデックスを使用してパラメーターをバインドしており、設定したすべてのプロパティも含まれていません!
私はこれで数時間遊んでいますが、何の進歩もありません。私はここで完全に途方に暮れています。意味がありません。これを前に見た人はいますか?何が起こっているのか分かりますか?
EDIT私は言及するのを忘れました:User
IDでジェネリックを取得できるようにしたいので、ここでディスクPersonUser
リミネーターを使用しClientUser
ています。
nhibernate - マッピング方法NHibernate のコードで?
複数のプロパティに対して一意の制約を定義する必要があります。XML では、これは次のようになります。
NHibernate (3.3+) に相当するコードによるマッピングは何ですか? 複数列の一意のインデックスを作成するための代替手段はありますか?
c# - コードによる Spring.net + Nhibernate 3.2 マッピング
ASP.NET MVC 4アプリケーションがあります。Spring.netとNhibernate 3.2を使用します。構成は xml ファイルによって行われます。
最近、Nhibernate のMapping by Codeの新機能に取り掛かりました。現在のアプリケーションに実装しようとしているので、ClassMapping が構成され、それに応じてスキームが更新されます。
これを達成できず、xml 構成にいくつかの変更を加えました。
これが私のNHibernate構成です
サンプル マッピング クラス
うまくいかないようです。テーブルは生成されません。
何か不足していますか?以下のリンクでFNHに対して行われたように、LocalSessionFactoryObjectをオーバーライドすることを考えていました。それは私にとってもうまくいくでしょうか?トランザクション管理などを壊さないかどうかはわかりません。
この件についての洞察を教えてください。
この状況での最善のアプローチは何ですか?
c# - コード、削除、および SQL クエリによる nhibernate マッピング
私は nhibernate 3 を使用しており、以下のようなコードでマッピングしています:
これが私の簡単なコードです:
いくつか質問があります:
- nhibernate がこのコードを次のような SQL クエリに変換する理由 (正確な順序で):
- UPDATE は PubCalcMscPlFactors をクリアし、PubCalcInvokes への NULL FK に設定します
- UPDATE は PubCalcMscPlFactors をクリアし、FK を PubCalcInvokes に設定します。WHERE 条件では、PubCalcMscPlFactors からの PK を使用しています。
- DELETE クリアされた PubCalcMscPlFactors コレクション
- この動作を変更して DELETE のみを実行することは可能ですか?
nhibernate - NHibernate Conformist エンティティのセットではなく単純な型のセットを使用した多対多のマッピング
NHibernate Conformist マッピングを使用しています。ManyToMany
、OneToMany
、Element
、およびComponent
リレーション タイプを使用して、さまざまなコレクション プロパティの複雑なマッピングを既に作成しています。しかし、私は今日、私を困惑させるものに出くわしました。
テーブルPermission
には列PermissionId
とがありますName
。次に、列と列を持つテーブルと、UserPermission
列UserId
と列を持つテーブルがあります。PermissionId
GroupPermission
GroupId
PermissionId
ご覧のとおり、Permission
はエンティティであり、ユーザーと権限の間、およびグループと権限の間には多対多の関係があります。User
ただし、 andオブジェクトを使いやすくするために、andを持ちGroup
たくありません( Conformistのリレーション タイプを使用すると簡単に実現できます)。私は一連の権限名を持ちたいと思っています。通常、多対多を使用する結合テーブルの問題を除いて、関係タイプでこれを達成します。User
Group
Set<Permission>
ManyToMany
User
Group
Element
多対多でもある単純型のコレクションをマップするにはどうすればよいですか?
c# - NHibernate に 1 対 1 の関係で孤児を削除させるにはどうすればよいですか?
モデルにはオブジェクトがあり、それをクラス X と呼びます。モデルには、プロパティとしてクラス X のインスタンスを持ち、A、B、C などと呼ぶ他のいくつかのクラスがあります。これは本質的に一対一です。各 X は 1 つの親クラスにのみ属することができるため、1 つのマッピング。データベース側でこの関係をマップするために、現在、テーブル A、B、および C の X テーブルへの外部キーを使用しています。NHibernate マッピングについては、A、B、および C のマッピングで現在使用しています。クラス:
これは主に、クラス X の保存、取得、および更新に機能します。NHibernateOneToOne
マッピングを正しく機能させるには多くの問題がありました。問題は、永続クラス A を取得し、その X を X の新しいインスタンスに置き換えてから、その A インスタンスを保存すると、新しい X インスタンスがデータベースに書き込まれ、A 列の外部キーが更新されることです。しかし、古い X は削除されないため、孤立した X になります。
これらの孤立した X が自動的に削除されることを望みます。X は、適切に処理するためにカスケードを設定した他のテーブルとの独自の多くの関係を持つ複雑なクラスであるため、NHibernate にそれを実行してもらいたいと考えています。孤立した X を適切に削除するように SQL スクリプトを設定しています。行が長い。
クラス X にその親アイテムへの参照を配置することを含む解決策を回避しようとしています。これは、それが属することができる合計 5 つのクラスがあり、クラス A には X が 1 つ、クラス B には名前付きの X が 2 つあるなどの状況があるためです。プロパティなど
私がこれまでに試したこと:
DeleteOrphans
マッピングへの追加ManyToOne
- 機能しません
OneToOne
マッピング - キーが他のテーブルにあることを本当に望んでおり、とにかくカスケード削除をサポートしていないようです。
次のことも考慮されます。
NHibernate は、更新や削除などが発生したときに何らかのトリガーを設定することさえサポートしていないようです。
どうやら、OneToMany
とのManyToMany
マッピングのみが をサポートDeleteOrphans
しているため、実際のプロパティである種のリストまたはセットを使用し、getter と setter を使用して、モデルの残りの部分に対して通常のプロパティのように見せることができます。非常にハックに聞こえますが、X で他のクラスへの参照が必要になる場合があります。
データベース トリガー - SQL Server トリガーをこの方法で使用できるかどうかはまだ確認していませんが、非常に厄介な解決策のように思えます。
これを機能させる方法についてのアイデアはありますか?