問題タブ [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.
entity-framework - Entity Framework のコードを生成する Microsoft カスタム ツールの使用を避けるにはどうすればよいですか?
Visual Studio 内でコードを生成するカスタム ツールを提供する Microsoft の傾向は、私にとって必ずしも魅力的ではありません。Entity Framework に関しては、Db Context Template の使用や edmx ファイルの作成を避けたいと考えています。
Visual Studio 内でコードを生成する Microsoft のカスタム ツールが気に入らない理由はいくつかあります。
1) Entity Framework 構成のデータベースへの接続文字列には、醜いメタデータ コードが含まれています。
2) 日付モデルを変更する必要がある場合、edmx ビジュアル ファイルを変更する必要があります。データ モデルを変更したいときに、ある種のビジュアル ツールに制御を渡すのは好きではありません。それはとても「私のコントロール外」に見えますか?
POCOを手動でコーディングする方法と、対応するコードごとのマッピングを示してください。
mapping-by-code - MappingException の理由: 次のパーシスタがありません: MyClassProxy
SaveOrUpdate
通話中にMappingException No persister for: MyClassProxy
.
奇妙なのは、コードを使用して新しい行を挿入できることですが、その行が存在し、リポジトリがそれを更新しようとすると、この例外が発生します。
この例外に関する多くの質問を検索して読んだ後、この理由を見つけるのに役立ちませんでした。マッピングがデータの読み取り/挿入で機能する場合、この例外につながる可能性のある理由は何ですか?
私のケースに関するいくつかの詳細情報:
- NHibernate バージョン3.3.1.4000を使用
- マッピングはコードによって作成され(流暢ではありません)、参照される別のdllで作成されます
- マッピングは a
ClassMapping
とSubclassMapping
識別子付きの aで構成されます
postgresql - NHibernate コードによるマッピングの SqlInsert でカスタム関数を使用するとエラーが発生する
標準の SqlInsert で標準の INSERT を使用する場合に機能するコードによる NHibernate マッピングがあります
ただし、Postgresqlストアドプロシージャを使用したいので、挿入と更新の両方が同じルーチンを使用できます
ただし、Postgresql 関数を使用すると、エラーが発生します。
それが役立つ場合は、これが私の Postgresql ストアド プロシージャです。
私も次のことを試しましたが、まだ運が悪く、すべてにエラーがあります:
エラーを回避するには、何を使用すればよいunexpected row count of -1
ですか? また、Google は -1 を削除するため、Google で検索するのも困難です。
nhibernate - CompositeIdentity を使用したコード ManyToOne による NHibernate マッピング
NHibernate 3.3.3 を使用して、FluentNHibernate マッピングを NHibernate マッピング バイコードに変換しようとしています。目標は、NHibernate 3.3.3 にアップグレードし、配布されるアセンブリの数を減らすことです。FluentNHibernate の References マッピングを多対 1 マッピングに変換する際に問題が発生しています。
私のエンティティの多くには、翻訳が必要な説明があります。このために、利用可能なすべての言語でこれらのテキストを含む Texts テーブルを使用します。テキスト ID を使用して Texts テーブルを参照し、データ アクセス オブジェクトで必要な言語をフィルター処理します。これは、NHibernate 3.1 と FluentNHibernate を使用して作成し、NHibernate 3.3.3 とコードによるマッピングを使用して作成しますが、MappingException と言って、プロパティ マッピングの列数が間違っています: Category.Description タイプ: テキストです。
新しいマッピングのどこが間違っていますか? または、このタイプのマッピングは NHibernate 3.3.3 では不可能です。
これは Texts テーブルです (SQL サーバー 2008)。
テキストクラス:
例として、Category クラスを次に示します。
Category クラスの FluentNHibernate xml マッピングは次のようになります。
これから生成されたもの:
これは、私が作成した NHibernate ClassMapping です。
これから、この xml マッピングを取得します。
c# - NHibernate - プロキシとして返されたマップキー、熱心なロード?
NHibernate を使用してコードでマッピングしています。クラスは次のとおりです。
そしてここにマッピングがあります:
問題は、ディクショナリのキーにアクセスしようとすると、キーの種類が AttributeTypeProxy になることです。次に、セッションが存在しなくなったコード領域でキーを遅延ロードしようとするようです。したがって、次のエラーがスローされます: Initializing[AttributeType#1]-Could not initialize proxy - no Session.
そのため、いくつかの調査の後、強制的にロードする必要があると言われました。キー マッピングに関連する .Lazy は表示されません。また、Map の値が熱心に読み込まれることを確認しました (これは CollectionLazy.NoLazy によるものだと思います)。Map の熱心な読み込みのキーを作成するにはどうすればよいですか?
編集:
Rippoの回答に従って属性を適切にロードしないで作成しようとして、Personのマッピングを一時的に変更して属性テーブルを作成しました。
ここで、彼の例に従ってアクセスしようとすると、次のperson.Attributes
エラーが発生します: Initializing[Person#1]-failed to lazily initialize a collection of role: Person.Attributes, no session or session was closed
Rippo は、実際にデータを取得するコードを投稿することも提案しました。私はこれらの方法を使用します:
Map を使用して IDictionary をマッピングする前に、これらを使用しても問題はありませんでした。ただし、これまでは、プロパティと ICollections のみを使用していました (Set マッピングを介して)。また、これはクライアント/サーバー アプリケーションに使用されることにも言及する必要があります。クライアントは MVVM WPF アプリケーションで、サーバーはサービスになります (現在は単なるコンソール アプリです)。
編集2:
回避策を見つけましたが、それを答えとは絶対に考えません。また、なぜそれが機能するのかわかりません。私が思いつくことができる唯一の結論は、コードによるマッピングのマップがその仕事をしていないということです。これが私が変更したものです:
うん。ディクショナリからのキーも保持するために、AttributeType の ICollection を追加しました。属性から実際のキーのみを返すことができます。ただし、NHibernate が適切に使用するには set メソッドが必要です。メソッドには何も入れていません。
次に、これをマッピングに追加しました。
これは、PersonId と AttributeTypeId を含む UnusedAttributeTypes というテーブルを作成するだけです。オブジェクト経由でアクセスできないため、これはダミー テーブルです。
今、私が行って呼び出すとperson.Attributes.Keys
、それらはプロキシ AttributeType オブジェクトではなく、実際のオブジェクトであり、適切に入力されます。また、person.Attributes.Values
以前と同じようにまだ人口が多いです。そこに変更はありません。
NHibernate のソース コードを検索して、これで問題が解決する理由や、実際の問題は何かを調べる必要がないことを願っています。
編集 3 : c.Cascade(Cascade.All); を削除しました。AttributeTypes マッピングから。
nhibernate - シリアル化中にjson.netがnhibernateプロキシオブジェクトを無視する
以下のコードを使用して、プロキシ オブジェクトをシリアル化できます。
しかし、シリアル化中にオブジェクトをJSON.NET
無視するにはどうすればよいですか。NHibernate Proxy
私が直面している問題は、親オブジェクトが何千もの子オブジェクトをフェッチしていることです。ここで、JSON を親オブジェクトに対してのみ送信したいので、プロキシ オブジェクトを無視して熱心に読み込まれた関係のみをフェッチしたいと考えています。
上記のコードにコメントすると、JSON.NET がプロキシ オブジェクトのシリアル化に失敗したというエラーが表示されます。
助けてください!