問題タブ [entity-framework-4.3.1]
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# - エンティティを別のコンテキストからコンテキストに追加し、既存のオブジェクト グラフ エンティティをアタッチして重複しないようにする
既存のエンティティが含まれている場合と含まれていない場合がある、かなり複雑なオブジェクト グラフを使用して新しいエンティティを作成するメソッドがあります。そのメソッドは独自のコンテキストを管理します。独自のコンテキストを維持し、エンティティの追加を試みる別のクラスのメソッドで消費されるエンティティを返します。
分業の理由は、2 番目の方法が、いくつかの異なるエンティティ作成シナリオに共通する一連の処理を行うためです。エンティティをデータベースに保存する前に、2 番目の方法が成功することが重要であるため、最初の方法でエンティティを保存したくありません。
問題は、2 番目のコンテキストがエンティティを追加すると、オブジェクト グラフ全体が真新しいものとして扱われ、データベースに重複が作成されることです。
エンティティを 2 番目のコンテキストに追加し、そのオブジェクト グラフ内の既存のエンティティをすべてアタッチする最善の方法は何ですか?
オブジェクトグラフをトラバースしてID > 0をテストするようなことを避けようとしています...
c# - コードはコンパイルされますが、DbContext.SaveChanges() は最終的に [...]Generic.List`1[x]' を型 'x' にキャストしようとします。
一部のコードのリファクタリングを完了したところですが、今DbContext
行った変更の影響を受けるべきではない次の計算コードを保存すると、このエラーが発生します。
エラーは次のとおりです。
{"タイプ 'System.Collections.Generic.List`1[_3T.NewDomain.Quote.Pricing.PriceLineItem]' のオブジェクトをタイプ '_3T.NewDomain.Quote.Pricing.PriceLineItem' にキャストできません。"}
次の呼び出し時にトリガーされます。DbContext.SaveChanges()
かなり時間がかかると予想されるデバッグ プロセスに着手します。しかし、コードが正常にコンパイルされる方法について、私は完全に困惑しています。それでも、DbContext
リストを単一のインスタンス変数に割り当てようとしています。
このようなことにつながる可能性のある落とし穴はありますか? 私は何を見落としましたか?
entity-framework - この関係でカスケード削除がデフォルトでオンになっていないのはなぜですか?
LabelLineItem と DespatchPart の間には 1 対多の関係があります。
この関係でカスケード削除がオフになっている理由がわかりません。
流暢な API を使用してコンテキストで定義された関係はありません。DespatchPart には LabelLineItems ナビゲーション コレクションがないため、LabelLineItem への参照はありません。
1 対多の関係では、デフォルトでカスケード削除が行われると理解しています。上記のコードサンプルで示されているように。
0 または 1 対多のリレーションシップは、デフォルトで次のいずれかの場合のように削除をカスケードします。 .LabelLineItems).WithOptional(i => i.DespatchPart).
しかし、どちらもそうではないので、私は混乱しています。
参考までに - (SQLManagementStudio で) ディスパッチ パーツ レコードを削除してカスケード削除をテストしたときに、参照されている DespatchPart レコードを削除しようとしたときに、LableLineItem テーブルで FK 違反の試行を受け取ったため、カスケードがオフになっていることは確かです。削除が LabelLineItem テーブルにカスケードされていれば、これは発生しませんでした。
entity-framework - EF 4.1.3 同時実行のための Rowversion の実装が機能しない
すべてのエンティティが継承するスタンプ、ID、および状態と呼ばれるバイト配列を含む BaseEntity クラスを取得しました。スタンプをマッピングしています
これは、このように設定されている BaseEntityConfiguration に設定されています
マッピングはこのように行われます
データベースにスタンプ ROWVERSION NOT NULL があります。テーブルEntityAにDbUpdateConcurrencyExceptionを処理するコードがありますが、スタンプが異なっていてもこれはキャッチされませんまた、私が期待していたスタンプフィールドに関するwhere句はありません
whereステートメントが表示されていないので、通常のマッピング設定で試してみましたが、それでも同じ結果が得られます
**EF が渡されたものではなく最新の Rowversion を取得しているという問題が見つかりました。これを停止するにはどうすればよいですか。**