問題タブ [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 - 1つのクラスをタイプ/アイテムを持つ多くのクラスにマップします
私の問題は、親クラスがあり、親ごとにclassBのリストがあることです。たとえば、テーブルは次のとおりです。
画像
コンピューター
労働者
私たちはすべてのコンピューターと労働者のために多くの画像を持っています。コンピューターとワーカーのクラスには、画像のリストがあります。コンピューターの場合、画像アイテムは次のとおりです。
労働者の画像アイテムは次のとおりです。
クラスは次のようになります。コンピューター:-id -age -owner -imagesワーカー:-id -age -name -images
画像については、何が必要かわかりませんが、次のようなものがあります。-id -filename(マッピングで必要な場合はオプション)-type -item
それをどのようにマッピングするかについてのアイデアはありますか?
nhibernate - NHibernate - 同じタイプの 2 つのコレクションをデータベースにマッピングする
Hibernate マッピングの質問。User というエンティティと Menu というエンティティがあります。ユーザーには、メニューの 2 つのコレクションが含まれています。
とにかく、新しいエンティティを作成せずに、User と Menu (おそらく UserHistory と UserFavourites) の 2 つの関係テーブルを生成し、それぞれに UserIds から MenuIds へのマッピングが含まれていますか? マッピングのみで実行できますか (可能であれば FluentNHibernate マッピング)? または、私がここでやろうとしていることを行うためのより良い方法はありますか?
ありがとうございました。
asp.net-mvc - Fluent NHibernate が複数のフィールドの問題に参加する
現在、既存の .NET 4.0 MVC 3 Web アプリケーションのデータ アクセス レイヤーをエンティティ フレームワークに移植する方法を研究しています。多くの理由がありますが、主な理由は何千ものストアド プロシージャによるもので、テーブルに 1 つのフィールドを追加するだけで 30 ~ 50 の sproc 編集が発生します!!
MS SQL Server 2008 R2 を使用しており、マッピングには NHibernate と Fluent を使用したいと考えています。
私が抱えている問題を簡単な例に単純化しました。
次の 2 つのテーブルを想像してください。
「製品」テーブル
「製品名」表
Products テーブルには製品のリストが含まれ、それぞれにデフォルトの英語の名前が付けられます。Product Names テーブルには、製品の ID と多くの翻訳が含まれます。
現在、ストアド プロシージャを使用すると、次のようになります。
注: @Culture はプロシージャに渡されます
これにより、ローカライズされた名前またはデフォルト (英語) の名前を持つ単一の製品が常に返されます。
私の質問は: Fluent NHibernate のマッピング レベルでこれを行うことは可能ですか? 「2列に参加する方法」について何日も検索してきましたが、うまくいく解決策が見つかりません。このような成熟したフレームワークでこれが不可能な場合、奇妙に思えますか?
私が実験してきたことの例として:
ただし、これにより次の例外が発生します。
これは、製品 109 に 5 つの翻訳があり、5 つすべてを 1 つの文字列にマッピングできないためです。
「HasMany<>」メソッドを使用して、すべての翻訳を製品内のリストにマップすることができました。しかし、これは私が必要とするものではありません。
nhibernate - 一度に多くのタイプのFluentNHibernateDefaultCascadeをオーバーライドする
次のように定義された抽象エンティティ基本クラスがあります。
さらに、自動マッピングを使用しています。
SessionItem
いくつかの派生クラス/テーブルがあり、それらすべてのカスケードポリシーをオーバーライドしたいと思います。私は次のことを試しました:
ただし、残念ながら、SessionItem
は抽象的であるため(マップされていないため)、オーバーライドは呼び出されません。(IAutoMappingOverrideを使用して)サブクラスごとにオーバーライドすることは避けたいと思います。
それぞれにIAutoMappingOverride<>を使用せずに、複数のタイプのカスケードをオーバーライドする方法はありますか?
nhibernate - 同じインターフェースを実装する複数のクラスのマッピング
次のインターフェイスを実装するクラスがあります。
このインターフェイス(ユーザー)とインターフェイスを実装するデフォルトのクラスはコアライブラリ内で定義されており、理想的にはこれを変更したくありません。ただし、ユーザーにプロパティを追加する必要があるため、IUserインターフェイスも実装するカスタムクラスを追加しました。これは、Userクラスをマップしたのと同じようにマップしましたが、フィールドを追加しました。しかし、私が言おうとすると:
エラーが発生します:
複数の階層によって実装されたSecurity.IUserのあいまいな永続化:Web.Security.Models.User Security.Models.User
NHibernateには、どちらを使用するのが好ましいかを判断する方法がないため、なぜこれを取得するのかを理解できます。マッピングでこれをNHibernateに促すことができるかどうか疑問に思いましたか?
助けていただければ幸いです。ありがとう
nhibernate - NHibernate - 同じインターフェースを実装する複数の型
私のアプリケーションには次のタイプが定義されています
User クラスは次のように流暢にマッピングされます。
IUser の別の実装を作成したいのですが、いくつかの制限があります。
- 新しいフィールドは、Users テーブルと同じテーブルに追加する必要があります
- 型を拡張するコードは別のプロジェクトに存在します
たとえば、ここに私の新しいクラスがあります:
次のようにマッピングされます。
これに関して私が最初に抱えた問題は、同じインターフェースが 2 回マップされるのを好まないということでした。Application_Start イベントにコードを追加して、CustomUserMap クラスが存在しない場合にのみ UserMap クラスを追加することで、これを克服しました。
ただし、すぐに次の問題に遭遇しました。別のタイプの IUser インターフェイスへの参照を追加すると、エラーがスローされます。
テーブル Blogs からの関連付けは、マップされていないクラス IUser を参照します。
私はおそらく完全に間違っていると思います。誰かが私が間違っていることを教えてくれれば幸いです。ありがとう
c# - Fluent NHibernate - 2 つの列を使用した 1 対多のマッピング
次の行に沿ったdbスキーマがあります。
製品
- ID
- 商品名
- 説明
- 店舗ブランド
製品バリエーション
- バリエーションID
- 製品番号
- サイズ
- 店舗ブランド
- 価格
予想通り、クラスは次のようになります。
私はこのようなマッピングクラスを持っています:
これは一種の作業です...
しかし、私がする必要があるのは、Product.Brands を ProductVariation.Brands と結び付けることです... (逆もまた同様です)
したがって、Product を照会すると、そのブランドの ProductVariations のリストが返されます... (注意、ProductVariation にはクラスにプロパティがありませんが、マッピング用の列があります)
ProductVariation.ID は一意ではありません。キーは ProductVariation.ID と ProductVariation.Brand (データベース上) です。
fluent-nhibernate-mapping - subclassMap からのコンポーネントの参照
サブクラス マップからコンポーネントを参照しようとしていますが、次の例外が発生します。
「ビジターは、「RecipeFermentable」のプロパティ「Weight」から参照された、未解決のコンポーネント化された参照「Weight」を試みましたが、続行できません。」
これは、通常の ClassMap で実行すると機能しますが、SubclassMap にリファクタリングした後に機能しなくなりました。
.net - Fluent NHibernate を使用した既存のデータベースへの階層ごとのテーブル マッピング (識別子列なし)
Fluent NHibernate (1.2.0.712) を使用した既存のデータベースへの階層ごとのテーブル マッピングに問題があります。これが単純化されたケースです。
私のクラス構造:
データベース構造:
したがって、基本的に、いくつかの特定のデータ (ID と名前) + いくつかの外部キー (参照オブジェクト 1 または参照オブジェクト 2) を含む 1 つのテーブル (エンティティ) があります。
抽象クラス AbstractEntity には Id と Name が含まれます。ConcreteEntity1 と ConcreteEntity2 は派生クラスです。
データベース内の参照に応じてこれらの派生インスタンスをマップしたいので、ReferencedObject1 への参照がある場合 -> ConcreteEntity1 のインスタンスです。ReferencedObject2 への参照がある場合 -> ConcreteEntity2 のインスタンスです。
いくつかのコード:
実際、私の質問は、派生クラスをどのようにマップすればよいですか? 流暢なnhibernate wikiを調べたところ、
クラス階層ごとのテーブル戦略を実行したい場合は、ClassMap で識別子列を指定するだけです。
しかし、私が理解している限り、識別子の列はありません。私のケースは、外部キー参照に応じてサブクラスを決定することです。
注: 複数の識別子列には DiscriminateSubClassesOnColumn("").Formula([insert custom sql here]) を使用します
式の使用法の良い例が見つかりません。私の場合に役立ちますか?そして、私は少し混乱しています、多分私は何か間違ったことをしていますか?
誰でも私を助けることができますか?前もって感謝します :)
c# - Fluent NHibernate - 子プロパティ コレクションを個別ではなくバッチでクエリする
他のエンティティの複数のコレクションを持つエンティティがあり、理想的には 1 つのバッチでそれらを積極的にロードしたいと考えています。以下の設定例:
エンティティのマッピング:
そして、データベースに次のクエリを実行します。
エンティティ 1 のデータベースにクエリを実行すると、エンティティ 1 のコレクションが返されます。予想どおり、NHProf を使用すると、エンティティ 2/3 のそれぞれに移動する単一のクエリが作成されていることがわかります。つまり、エンティティ 1 の 10 行が返されると、その 3 倍のクエリが実行されます。熱心な読み込みクエリをバッチ処理する方法はありますか?
NHibernate は、より似たものを生成します。
したがって、データベースに何度もクエリを実行する必要はありませんか?
詳細が必要な場合はお知らせください。