問題タブ [nhibernate-3]
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# - オブジェクトAにはオブジェクトBのコレクションがあります。LINQを使用するNHibernateで、少なくとも1つのBを持つAのリストを取得する方法
これらのドメインオブジェクトを例として取り上げましょう。
NHibernate 3.xを使用して、これらの名前A
を持つオブジェクトを取得する必要がありますB
name1
name2
。
たとえば、B
名前の配列から文字列として取得したいものを取得するとしますstring[] names = new string[] { "name1", "name2" }
。
私は考えましたが.Query<A>().Where(someA => some.CollectionOfB.Any(someB => names.Contains(someB.Name)))
、これがNHibernateLINQプロバイダーによってSQLクエリとしてコンパイルされるのではないかと思います。多分これはあまり最適ではないSQLクエリにコンパイルされるでしょう。
NHibernate 3.x LINQプロバイダーを使用してこのクエリを構築する最適な方法は何でしょうか?
mysql - 同じ識別子値を持つ別のオブジェクトが、エンティティのセッション: XXX に既に関連付けられていました
NHibernate 3 と MySQL の Castle.ActiveRecord を実行する ASP.NET MVC 3 C# プロジェクトがあり、このチュートリアルで動作するように「要求ごとに 1 つのセッション」を取得しようとしています。
そして、それはいくつかのものでうまくいくようですが、そうするとSaveAndFlush()
、コマンドはエラーを出します:
そして、実行しようとするとSave()
、同じメッセージが表示されるため、関数とは関係ありませんFlush()
。
検索するといくつかの結果が見つかりましたが、それを機能させるために使用できるものはありません。
自分のやり方がわからないのでテストしていないのは、
何か案は?
nhibernate - Get()の後にアソシエーションを熱心にロードする
私はこれよりも関係をロードするためのより良い方法を見つけようとしています:
私は次のようにQueryOverAPIでこれを行うことができます:
同じSQLが生成されると思いますが、冗長すぎます。
以下のようなことをする方法はありますか?
linq - NHib 3の構成とマッピングは空の結果を返しますか?
注:私は特にFluent NHibernateを使用していませんが、3.xの組み込みのマッピングスタイルを使用しています。ただし、レコードを返す必要があると思うときに、空白のレコードセットを取得しています。
私は何か間違ったことをしていると確信しており、それが私を壁に押し上げています。:)
背景/セットアップ
- MaximoというIBMの製品用のOracle11gデータベースがあります。
- この製品には、作業指示をリストする作業指示と呼ばれるテーブルがあります。そのテーブルには、一意の作業指示番号を表す「wonum」というフィールドがあります。
- maximoスキーマを介してテーブルにアクセスできる「レポート」ユーザーがいます
- 例:「select * frommaximo.workorder」
- OracleのManagedODP.NETDLLを使用してデータタスクを実行し、初めて使用しています。
私が試したこと
- これをテストするための基本的なコンソールアプリケーションを作成しました
- マスターブランチのNHibernate.DriverからOracleManagedClientDriver.csを追加しました(使用しているリリースには正式には含まれていません)。
- WorkorderBriefBriefというPOCOを作成しました。これには、WorkorderNumberフィールドしかありません。
- その値のみを読み取り専用値としてマップするクラスマップWorkorderBriefBriefMapを作成しました。
- 作業指示書の行を書き込もうとするコンソール出力を備えたコンソールアプリケーションを作成しました。
- セッションとトランザクションは正しく開いているように見えますが、
- 接続文字列に対して標準のODP.NETOracleConnectionをテストしました
コード
POCO:WorkorderBriefBrief.cs
マッピング:WorkorderBriefBriefMap.cs
まとめる:Program.cs
あなたが与えることができるどんな助けにも前もって感謝します!
アップデート
次のコード(OracleDataReaderを使用する標準のADO.NET)は正常に機能し、必要な16個の作業指示番号を返します。私にとって、これはOracleManagedODP.NETよりもNHibernateを使用していることを示しています。ですから、上記のマッピングまたは構成で行ったのはばかげたことだと思います。
c# - 'Disabled Ghost Property fetching for の意味エンティティ レベルでレイジーをサポートしていないためです。
NHibernate-DataAccess で次の警告が表示されました。
「エンティティ レベルでレイジーをサポートしていないため、エンティティのゴースト プロパティ フェッチを無効にしました」
誰かが知っていますか、これはどういう意味ですか?- これを解決するには何を変更する必要がありますか?
この警告の原因となっているエンティティのマッピングを次に示します。
クラス BusinessTypeBase の定義を更新します。
クラス BusinessType の定義を更新します。
nhibernate - ID でリスト アイテムを追加する
まあ言ってみれば:
NHibernate を使用して DDD を実装しようとしているので、データベースから取得せずに子アイテムを親にリンクする方法を知りたいです。
mapping-by-code - MappingException の理由: 次のパーシスタがありません: MyClassProxy
SaveOrUpdate
通話中にMappingException No persister for: MyClassProxy
.
奇妙なのは、コードを使用して新しい行を挿入できることですが、その行が存在し、リポジトリがそれを更新しようとすると、この例外が発生します。
この例外に関する多くの質問を検索して読んだ後、この理由を見つけるのに役立ちませんでした。マッピングがデータの読み取り/挿入で機能する場合、この例外につながる可能性のある理由は何ですか?
私のケースに関するいくつかの詳細情報:
- NHibernate バージョン3.3.1.4000を使用
- マッピングはコードによって作成され(流暢ではありません)、参照される別のdllで作成されます
- マッピングは a
ClassMapping
とSubclassMapping
識別子付きの aで構成されます
c# - NHibernate に格納されていない多対多の関連付け
問題を正確に説明しようとします。
(コレクション)と1 対多の関係をA
持つエンティティがあります。B
また、エンティティB
はエンティティmany-to-many
と関係がありますC
。
タイプ の一時オブジェクトを最初に保存すると、と関連付けられた関連する一時エンティティ インスタンスA
の両方がデータベースに正しく作成されますが、 に関連付けられた一時インスタンスは作成されません。A
B
A
C
B
多対多の関連付けは、関連付けの両側で次のようにマッピングされます (コードによるマッピング アプローチ)。
また、両方ともまだ一時的なオブジェクトであるエンティティB
とエンティティがインスタンス化されると、エンティティのコレクションにエンティティの 1 つを追加し、その逆も行います。C
B
C
最後に、トランザクションは正常に終了します。これは、エンティティA
とB
、およびそれらの関連付けが期待どおりにデータベースに格納されていることを意味します。
エンティティのC
関連付けがデータベースに保持されないのはなぜですか? 私は何を間違っていますか?
注: NHibernate 3.x シリーズの最新バージョンを使用しています。
注 2: SQL Server データベースのプロファイルを作成したところ、m:n テーブルへの挿入は実行されません。
c# - 「その場で」Hibernateの多対1
次の問題が NHibernate で別の方法で解決できるかどうか知りたいです。
このドメインがあるとしましょう:
プロパティは、コレクション プロパティに関連付けられた永続オブジェクトのLastAssociationWithB
1 つを表します。B
CollectionAssociationOfB
実際には、日付によって追加されLastAssociationWithB
た最後のB
永続オブジェクトを表します。
したがって、ドメインでは、 に新しいB
が追加されるとCollectionAssociationOfB
、 にも割り当てられLastAssociationWithB
ます。
これは、後でコードを単純な LINQ クエリに変換するための良い方法です。
とにかく、私の質問は次のとおりです。これに対する他のアプローチを知っていますか? たとえば、内部で SQL結合を生成するある種の多対 1 の関連付けで、テーブルに明示的な 1:n 関係を持たせる必要はありませんが、クラス プロパティは維持されますか?A
または、私の現在のアプローチは、このシナリオを解決するための推奨される方法ですか?
補足: 実際のシナリオでCollectionAssociationOfB
は、NHibernate マッピング構成で順序付けが指定されているため、順序付けられたリストです。
nhibernate - NHibernate RowCountInt64 は、変換されたクエリで間違ったカウントを返します
NHibernate クエリの実行中に奇妙なエラーが発生しました。フィルター処理および変換されるタイプのクエリがありますIQueryOver<ExternalUser, ExternalUser>
(問題の原因であると推測している DistinctRootEntity を使用)。次のようなクエリを作成します。
実行するquery.RowCountInt64()
と4になります。
実行するquery.List()
と、3つのアイテムが返されます。
私も試してみquery.ToRowCountInt64Query().List<long>().Sum()
ましたが、これも4になります。
私も試してみquery.ToRowCountInt64Query().FutureValue<long>().Value
ましたが、これも4になります。
これを解決する方法はありますか?