問題タブ [automapping]
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.
sql-server - バージョン 1.0RC の Fluent Nhibernate Automapping に関する問題
私は NHibernate を初めて使用し、Automap 機能を適切に動作させるためにいくつかの問題に直面しています。ここに私が抱えているいくつかの問題があります。
Fluent NHibernate の入門 wiki ( http://wiki.fluentnhibernate.org/Getting_started)では、店舗、製品、および従業員クラスのサンプルと、それらのクラスのマッピングが定義されています。手動マッピングを AutoMapping に置き換え、Fluent NHibernate を使用してスキーマを生成しました。すべてが適切に生成されました。ただし、アプリケーションがサンプル ストア、製品、および従業員オブジェクトを保存しようとすると、「TransientObjectException was Unhandled: オブジェクトは保存されていない一時インスタンスを参照しています - フラッシュする前に一時インスタンスを保存します。タイプ: FluentExample.Entities.Employee、エンティティ: FluentExample.Entities.Employee" .
自動マップは次のようになります。
オブジェクト作成コード (wiki からそのまま引用) は次のようになります。手動の流暢なマッピングを使用すると、オブジェクトの作成が正常に機能することに注意してください。
自分のクラスの 1 つで AutoMap 機能を使用しようとすると、クラスが作成されますが、実際にレコードを挿入しようとすると、何らかの理由でエラーが発生します。主なエラー メッセージには、「AssertionFailure は処理されませんでした: null 値」と表示されます。これは、私のクラス、構成/マッピング、エラー、およびテーブル作成スクリプトのサンプルです。(注: クラスの属性は ASP.NET MVC で使用するためのものであり、NH とは関係ありません。)
Fluent NHibernate の構成は次のとおりです。
そしてエラー。ゆっ!
そして、テーブル スキーマ - キックのためだけに。
自分の環境で自動マッピングを機能させるために多くのことを試しましたが、まだ完全には成功していません。私が試したいくつかのバリエーションは次のとおりです
- 静的マップを使用し、Fluent Nhibernate がテーブルを再作成できるようにします。
- Id のプライベート セットをパブリックに変更する
- それが問題だった場合に備えて Guid を試して設定するための primarykeyconvention を作成し、これを私のマッピングに追加します。
主キーの規則:
アドバイスやフィードバックは大歓迎です。
nhibernate - Fluent NHibernate を使用してクラスター化インデックスを作成するにはどうすればよいですか?
Fluent-NHibernate (自動マッピング付き) を使用してテーブルを生成していますが、デフォルトで使用される ID フィールドとは異なるクラスター化インデックスを選択したいと考えています。Fluent NHibernate を使用して、デフォルトの主キー フィールド以外のフィールドにクラスター化インデックスを作成するにはどうすればよいですか?
この背後にある主な理由は単純です。主キー フィールドに Guid を使用しています。デフォルトでは、NHibernate は主キー フィールドにクラスター化インデックスを作成します。通常、Guid は連続していないため、主キー フィールドでクラスタリングを行うとパフォーマンスの問題が発生します。
ご存知のように、テーブルの最後にレコードを追加する方が、テーブル内にレコードを挿入するよりもはるかに安価な操作です。また、テーブル内のレコードは、クラスター化インデックス内のアイテムの順序で物理的に格納されます。Guid はいくぶん「ランダム」であり、シーケンシャルではないため、テーブルに既に存在する他の Id Guid の値よりも小さい新しい Guid が生成される場合があります。その結果、追加ではなくテーブルの挿入が行われます。
これを最小限に抑えるために、DateTime 型の CreatedOn という列があります。すべての新しいレコードが挿入されるのではなく追加されるように、この CreatedOn 列でテーブルをクラスター化する必要があります。
これを達成する方法についてのアイデアは大歓迎です!!!
注: Sequential Guid を使用できることはわかっていますが、セキュリティ上の理由から、そのパスをたどりたくありません。
注: この投稿に対する回答はまだありませんが、現時点で考えているアイデアがいくつかあります。
Fluent なしで NHibernate を使用すると、クラスター化されたインデックスを NHibernate で直接作成できる可能性があると思います。これを行う方法を知るには、NHibernate についてまだ十分に知りません。私はかなり(ほぼ絶対に)それができると確信しています。
Fluent-NHibernate には、最近の書き直しの前に、SQL オブジェクトに属性 (クラスター化インデックスなど) を設定する方法が含まれていました。現在、そのオプションはなくなっているようです。そのオプションがまだ利用可能かどうかを確認するために、おそらくどこかに質問を投稿します。もしそうなら、おそらくそれを使用してクラスター化インデックスを設定できます。
Fluent-NHibernate は、構成が流暢に構築されたら、手動編集用に構成を公開する機能を提供します。この機能を試したことはありませんが、クラスター化インデックスを設定するために必要なレベルの粒度が提供される可能性があると期待しています。
最悪のシナリオでは、生成されたすべてのテーブルのクラスター化インデックスを変更する SQL スクリプトを作成できます。ただし、このアプローチに関していくつか質問があります。A. 自動スキーマ生成を使用しているため、NHibernate は次に構成を評価するときにクラスター化インデックスの変更を「元に戻す」ことはできますか? 2. クラスタ化インデックスが変更されたことを検出した場合、NHibernate はエラーになりますか? これをテストする必要がありますが、まだ行っていません。しかし、私はこのソリューションが本当に嫌いです。SQLServer2008 および MySQL に対して DB をテストしています。NHibernate の優れた点の 1 つは、データベースに依存しないことです。スクリプトを導入すると、すべての賭けがオフになります。
このインターフェイスから継承する IPropertyInstance クラスには、フィールドにインデックスを作成できるようにする Index プロパティがあります。問題は、クラスター化されたインデックスを作成できるようにするフラグやその他のオプションがないことです。最も簡単な解決策は、このメソッドにプロパティを追加して、クラスター化インデックスを作成できるようにすることです。これを Fluent-NHibernate 開発者に提案できると思います。
nhibernate - Fluent Nhibernate Automapping と Guids/UniqueIdentifiers を主キー フィールドとして使用する場合の問題
Fluent-NHibernate 自動マッピング機能 (最新バージョンのソフトウェア) を使用しようとしていますが、主キー フィールドとして Guid を使用すると問題が発生します。主キーに整数フィールドを使用すると、テーブルが正常に生成され、すべての Nhibernate 機能が正常に動作するように見えます。参考までに、NHibernate を使用してデータベース テーブルを生成しています。
整数 ID を持ついくつかのクラスを次に示します。
GUID を持つ同じクラスを次に示します。
これが私の構成です。
この問題を回避するために、1) Id フィールドに名前を付ける (必要ではないと思っていましたが) 2) Id を生成する (これは自動だと思っていました) ための規則 (以下を参照) を生成しようとしました。何が起こっているのか、なぜこれが機能しないのかわかりません。
また、自動マッピングをオフにして流暢に構成されたマップを使用すると、テーブルが正常に生成されます。
これは私を狂わせており、おそらく簡単な修正だと確信しています。何か案は?
ありがとうございました!
アンソニー
fluent-nhibernate - FluentNHibernate自動マッピングのオーバーライド
これは流暢なNHibernate初心者の質問ですので、我慢してください。
一連のクラスがあり、それに自動マッピング機能を適用しています。
ただし、いずれかの手法のプロパティの1つに一意性制約を付ける必要があります。
Fluent Wikiには、
他に影響を与えたくない場合は、特定のエンティティにわずかな変更を加える必要がある場合があります。withOverrideメソッドを使用してこれを行うことができます。
.Override(map => {
map.HasMany(x => x.Products).Cascade.All();});
しかし、.Overrideメソッドを適用するオブジェクトがわかりません。
今、私は持っています
AutoPersistenceModel returnModel = AutoMap.AssemblyOf()
ただし、AutoPersistenceModelオブジェクトにはOverrideメソッドがありません。
誰かが私にこれを説明するための簡単なサンプルコードを教えてもらえますか、またはいくつかの例を含むいくつかのリンクを教えてもらえますか?
ありがとう。
fluent-nhibernate - Fluent NHibernate で自動マッピングとスキーマ生成の両方を使用することは可能ですか?
私は以下を使用しています:
これは基本的に、Fluent NHibernate wiki にあるもののコピーです。ただし、この行を実行するたびに、これがスローされますInnerException
:
何が問題なのかよくわからないので、Fluent NHibernate はそもそもスキーマ生成と一緒に自動マッピングを行うことができるのだろうかと思っています。私がやりたいことは、データベースを見たり、テーブルをいじったりすることなく、POCO の永続化レイヤーを作成することです。
c# - Fluent NHibernate では、自動マップされた型と自動マップされていない型をどのように組み合わせますか?
現在、私は自分のプロジェクトを、各ドメイン エンティティに対して手動で定義する従来の流暢な nhibernate スタイルからClassMap
、自動マッパーにマッピングを自動生成させる方法に切り替えています。しかし、以前のクラシック マッピングと一致するように自動マッピングを微調整できるようになるまで、クラシック スタイルで既にマッピングしたクラスを使い続けたいと思います。
唯一の問題は、従来の流暢な nhibernate スタイルで既にマップされているクラスに自動マッパーがヒットすると、流暢な nhibernate がクラッシュすることです。
これが私のAutoPersistenceModel
セットアップコードです:
誰か助けてくれませんか?
より詳しい情報:
fluent-nhibernate wiki here で言及されている手法も試しました。残念ながら、私はまだエラーが発生しています: Duplicate class/entity mapping
.
fluent-nhibernate - Fluent NHibernate自動マッピング-多対多の関係テーブルを作成する方法は?
ある属性を使用して多対多の関係テーブルを自動的に作成する方法があるかどうか誰かが知っているかどうか疑問に思いましたか?テーブルを作成したり、クラスをマッピングしてそのリレーションテーブルにすることはありません。
属性[ManyToMany(3、Class = "DeploymentListUsers")]を追加すると、このクラスがDBにマップされていないというエラーが表示されます。
NHibernate.MappingException:テーブルUsersからの関連付けは、マップされていないクラスを参照します。
クラスを自分で定義したり、事前にDBにテーブルを作成したりしたくありません。
それはJAVAで可能だと思われますが、流暢なNHibernateは完全に実装されたバージョンの休止状態とJPAアノテーションですか?
http://www.hiberbook.com/HiberBookWeb/learn.jsp?tutorial=19mappingmanytomanyrelationships
ありがとう、Itay
fluent-nhibernate - 「ただ動く」Fluent NHibernate Automapping サンプル プロジェクトはありますか?
今週 NHibernate を検討し始めたばかりで、現在のプロジェクトで Automapping アプローチを使用したいと考えています。
数日前にダウンロードした Fluent NHibernate 1.0.0.594 を使用しています。
古いスタイルのエンティティ マッピングを使用する NHibernate ソース コードで Examples.FirstProject を見つけました。これは、箱から出してすぐに動作するため、NHibernate の紹介として私にとって非常に価値がありました。
ただし、AutoMapping の同様のスタンドアロンの動作例を見つけることができませんでした。Peter Brombergは、見栄えの良いサンプルを投稿しましたが、いくつかの重要なアセンブリが欠けているようです。彼は私が問題を解決するのを手伝ってくれていますが、まだうまくいきません。
次に、Automapping を使用するように Examples.FirstProject プログラムを変更しようとしましたが、すぐに、現在の経験レベルでは理解できない例外がスローされるという問題に遭遇しました。
最新の NHibernate コードで動作することが知られている Automapping サンプル プロジェクトを教えてもらえますか?
fluent-nhibernate - List<> をコミットしようとすると、Fluent NHibernate AutoMapping が「StaleStateException」をスローする
次のコードは、Order.OrderItems プロパティ (IList) がコミットされている場合に StaleStateException 例外をスローします。例外の全文は次のとおりです。
タイプ 'NHibernate.StaleStateException' の未処理の例外が NHibernate.dll で発生しました
追加情報: 予期しない行数: 0; 予想: 1
私は NHibernate を使い始めたばかりですが、これは私にとってまったく意味がありません。誰が何が悪いのか説明できますか?
ほとんどのコードは以下に追加されています。申し訳ありませんが、重要なことを省略するよりはましだと思いました。
OrderItems = orderItemsという行をコメントアウトすると、他のすべてが正常に機能します。
nhibernate - リストをどのように自動マップしますかまたはfluent NHibernateでfloat []?
サンプル プログラムが正常に動作するようになったので、Fluent NHibernate を使用して実際の作業を開始します。プロジェクトのクラス階層で Automapping を使用しようとしています。
これは科学計測アプリケーションであり、マッピングしているクラスには、float の配列であるいくつかのプロパティがあります。
これらの配列には、最大 500 個の値を含めることができます。
自動マッピングが配列で機能するとは思っていませんでしたが、とにかく試してみて、最初はある程度成功しました。各配列は (SQLite を使用して) BLOB に自動マップされ、実行可能なソリューションのように見えました。
最初の問題は、配列を含むオブジェクトで SaveOrUpdate を呼び出そうとしたときに発生しました。「float [] の永続化がありません」という例外が発生しました。
だから私の次の考えは、すべての配列を IList に変換することでした。
しかし、今私は得る:
Automapping は複雑なオブジェクトのリストを処理できるため、基本型のリストをマップできないとは思いもしませんでした。しかし、解決策のためにいくつかのグーグルを行った後、これは事実のようです。一部の人々は問題を解決したようですが、私が見たサンプル コードは、私が今持っているよりも多くの NHibernate の知識を必要とします - 私はそれを理解していませんでした。
質問:
1. Automapping でこれを機能させるにはどうすればよいですか?
2. また、このアプリケーションでは配列とリストのどちらを使用するのが良いですか?
必要に応じて、どちらかを使用するようにアプリを変更できます (リストの方が好きですが)。
編集:
Mapping Collection of Stringsのコードを調べたところ、ソースに文字列の IList を設定するテスト コードがあることがわかりました。
したがって、これは純粋な Automapping を使用して可能であるに違いありませんが、おそらく NHibernate で手動でマッピングするための必要な知識がないため、何も機能させることができませんでした。
誰かが私に方法を教えてくれない限り、これをハックする必要があると考え始めています (float の配列を単一の文字列としてエンコードするか、単一の float を含むクラスを作成し、それをリストに集約します)。それを適切に。
編集を終了
これが私の CreateSessionFactory メソッドです。それが返信の作成に役立つ場合...