問題タブ [fluent-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.
nhibernate - Fluent NHibernate は NHibernate からのすべてのマッピングをサポートできますか
NHibernate で Fluent NHibernate を使用したい。しかし、Fluent NHibernate が NHbernate からのすべてのマッピングをサポートしているかどうかを知りたいです。それともNHibernateに固執する方が良いですか?
nhibernate - 複合キーを使用して2つのテーブルを1つのエンティティに結合するNHibernate
私は次のデータ構造を持っています:
したがって、2つの結合されたテーブルを使用してこのようなデータを取得できます。
Resume
私のドメインの観点から、私はエンティティのみを気にします。現在の翻訳を持つエンティティは1つしかないためResume
、コレクションを持つエンティティは必要ありません。Resume_Translations
Resume
FluentNHibernateを使用した現在のマッピングは次のとおりです。
WHERE述語に履歴書のIDと必要な言語を渡すだけで、問題なくリポジトリから必要なものを取得できます。
ただし、値の挿入と更新に問題があります。
私の質問は、NHibernateが現在のエンティティのレコードを更新するのではなく、Resume_Translationテーブルにのみ新しいレコードを挿入するマッピングをどのように定義するかです。
したがって、私が達成したいのは、データベースに次のレコードがある場合です。
結合はテーブル間の1対1の関係に適しているため、これをエンティティに取り込み、言語と翻訳を変更すると、nhibernateが更新を実行し、理解できます。異なる言語と翻訳で同じIDを持つ新しいエンティティを追加しようとすると、nhibernateはキーがすでに存在するというエラーを生成し、それも理解しています。
ですから、確かに私は間違った道を進んでいますが、誰かが私が望むマッピングを達成する方法について正しい解決策を教えてくれるなら、私は大いに感謝します。
別の質問ですが、ビジネスの観点から、エンティティとその翻訳をどのように処理しますか?
よろしくお願いします。
トーマス
c# - モデル内の空の子、参照とともに保存すると Null<>
このように宣言されたオブジェクトがあります
モデルにnullではなく空のオブジェクトが必要なため、子に「空のオブジェクト」を設定しています。
私のデータベースには、このようなテーブルがあります
そして、私は私のマッピングに持っています
ここで問題が発生します。新しい を作成しようとすると、オブジェクトが保存されていない一時的なインスタンスを参照しているMyObject
というエラーが表示されます。だから、私はこれをしました:
これは保存に機能しますが、現在、私のオブジェクトにはnullの子があり、これは私が望む動作ではありません. 私が使用できるハックは、新しい を作成した後に子を空にリセットするMyObject
ことですが、より良い方法があるかどうかを確認したいと思います。
子はオブジェクトで null ではない必要がありますが、子オブジェクトの ID が 0 の場合は null として保存されます。
編集
null/reset 戦略全体をテストしただけで、うまくいきません。モデル内のオブジェクトに対する後続の nhibernate リクエストにより、一時的なオブジェクト エラーが発生します。
c# - ID に基づいていつ null を返し、いつ流暢な nHibernate をスローするかを指定する
私たちは、かなりラフなデータ モデルを持つレガシー コード ベースで作業しています。現在、次のようなオブジェクト マッピングがあります。
アプリケーションでは、棚のない本は ShelfId が 0 になります。Shelf テーブルには Id が 0 の行はなく、nhibernate に依存して.NotFound.Ignore()
null を返します。これは後で確認して処理します。
これでここまでたどり着きましたが、Shelf テーブルにエントリがない 0 以外の ShelfId にアクセスしようとすると、例外をスローしようとしています。
理想的には、nhibernate は ID が 0 でないシェルフが見つからない場合にのみ例外をスローし、ID が 0 のシェルフを要求されたときに null を返します。
どんな助けでも例外的です!
fluent-nhibernate - Fluent NHibernate - 永続データを持つ HasMany 関係に項目を追加できない
次のクラスがあります。
そして、これら 2 つのマッピング:
データベースからクライアントを取得すると:
すべてのデータがそこにあります。これは素晴らしいことです。しかし、新しい ClientMonthlyRevenue 子を追加しようとすると:
エラーが発生します:
ここで何かを見逃したり誤解したりしていますか? この保持されたリストに項目を追加できるようにするには、何を変更する必要がありますか?
nhibernate - NHibernateによる2対多の持続性
MySQL DBへの流暢なnhibernate自動マッピングに裏打ちされた、リポジトリパターンを使用する次のコードがあります。
次のスニペットは、ユーザーとユーザーをモデルに追加してから、データベースに永続化します。
user.Person.User = user;
これは機能しますが、オブジェクトが永続化されている場合Person
は、FKuserIdがnullに設定されていることを忘れないでください。
を自動的
Person.User
に入力する方法はありますか、それともこれを行うためのメソッドを作成する必要がありますか?そのユーザーに関連付けられているすべてのオブジェクトを永続化する方法はありますか(たとえば、1つのオブジェクトでrepository.Save(obj)を呼び出し、他のオブジェクトも永続化するようにします)。
/li>
c# - 流暢なニバネイト、一対多の関係に苦戦
次の例外が常にスローされます。
コレクションを初期化できませんでした: [FatorM.Sieq.Model.Entities.Culto.Ofertas#4][SQL: SELECT ofertas0_.Culto_Id as Culto3_1_, ofertas0_.Id as Id1_, ofertas0_.Id as Id9_0_, ofertas0_1_.Anonimo as Anonimo9_0_, ofertas0_1_ .Banco_Id as Banco3_9_0_, ofertas0_1_.Culto_Id as Culto4_9_0_, ofertas0_1_.Frequentador_Id as Frequent5_9_0_, ofertas0_1_.NomeAvulso as NomeAvulso9_0_, ofertas0_1_.NumeroCheque as NumeroCh7_9_0_, ofertas0_1_.Valor as Valor9_0_, ofertas0_.TipoOferta_Id as TipoOferta2_11_0_ FROM dbo.[Oferta] ofertas0_ inner join dbo .[寄稿] ofertas0_1_ on ofertas0_.Id=ofertas0_1_.Id WHERE ofertas0_.Culto_Id=?]
内部例外は次のとおりです。
列名「Culto_Id」が無効です。列名「Culto_Id」が無効です。
はい!二度...
ここにコードがあります:
1) CultoMapping.cs:
2) OfertaMapping.cs:
3) DizimoMapping.cs:
4) ContribuicaoMapping.cs:
Oferta と Dizimo は Contribuicao から拡張されています。
c# - NHibernateで失われた継承
EF4からnHibernateに変換しましたが、継承にほとんど問題はありません。
私のエンティティとマッピング:
私の合格したテスト:
失敗したテスト:
NHが継承を適切に解決しない理由を誰かが説明してもらえますか?同じ問題は、クラスごとのテーブルと階層ごとのテーブルにも当てはまります。
fluent-nhibernate - 2つ以上の列を1つのオブジェクトにどのようにマッピングしますか?
流暢なマッピングを使用して、次のものを作成するための要件を満たそうとしていますが、Googleで正しいキーワードを使用していないと思います...
私はテーブルと列を持っています:
これを次のようなオブジェクトにマップしたいと思います。
ご協力ありがとうございます!
nhibernate - Fluent NHibernate - Where 句を使用した HasOne
Fluent NHibernate を使用すると、次のように User クラスに対して 1 対多の関係をマップできます。
これは、削除されていないメンバーシップ レコードのみを取得するため、期待どおりに機能します。いいえ、これがユーザーごとに 1 つのレコードを返すことがわかっているメンバーシップに対して、Latest というフィールドがあるとは言いません。
ただし、Where メソッドはありません。私は次のように言ってコードでこれを行うことができることを知っています:
しかし、これでは、このプロパティに対して LINQ クエリを実行できません。以前はこれを制限として受け入れていましたが、パフォーマンスの面で本当に苦しめられ始めています。
誰かが助けてくれたら本当にありがたいです。