問題タブ [graphdiff]
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 - GraphDiff により、saveChanges() の後にエンティティの ID が設定されない
レコードの作成に graphDiff を使用すると、saveChanges() が呼び出された後、新しい ID がエンティティに戻されません。ここのgithubレポに記録されています-https ://github.com/refactorthis/GraphDiff/issues/144しかし、レポはそれほどアクティブではないようです。これを機能させます。
ただし、どのように機能する必要があるかについては、作成の場合、qualification.Id は常に 0 です。更新の場合、それは正しい ID です。
私の現在の回避策は、作成にグラフ差分を使用しないことですが、これは理想的ではありません。
ありがとう
expression-trees - GraphDiff: 「カスケーディング」所有コレクション
GraphDiff (NuGet で利用可能な最新バージョン) を使用して、それほど難しくないと思われるエンティティ モデルを処理しようとしています。次のようなモデルを考えてみましょう:
A のインスタンスを更新している場合 ( aEntityと呼びます)、次のことができます。
また、B を個別に更新したい場合もあります。
したがって、次のように、プロパティを導入することで変更を「カスケード」できると考えました。
...そして、それを両方のシナリオで次のように使用します。
B を更新するだけでは問題なく動作しますが、A を更新すると式の土地に落ちます。
GraphDiff でマッピングを共有する方法はありますか?
c# - 1 つ以上の外部キー プロパティが null 非許容であるため、リレーションシップを変更できませんでした
EF での更新中に次のエラーが発生します。
操作に失敗しました: 1 つ以上の外部キー プロパティが null 非許容であるため、リレーションシップを変更できませんでした。リレーションシップに変更が加えられると、関連する外部キー プロパティが null 値に設定されます。外部キーが null 値をサポートしていない場合は、新しい関係を定義するか、外部キー プロパティに別の非 null 値を割り当てるか、関連のないオブジェクトを削除する必要があります。
上記のエラーの原因となっている外部キー プロパティを見つける一般的な方法はありますか?
[アップデート]
上記のエラーの原因となる次のコードの 1 つのケース (切断された環境で作業していたので、以前graphdiff
はオブジェクト グラフを更新していました) を実行したい場合_uow.Commit();
:
c# - プロキシ生成を無効にして AsNoTracking を使用するのはいつですか?
私の WebApi プロジェクトでは、EF6 を使用し、Uow および一般的なリポジトリ パターンに従います。また、モデルを dto にマッピングし、その逆も行います。
現在、作成時に次のように設定していますdbContext
。
AsNoTracking
また、データベースからデータをフェッチするときにも使用します。
データベースを更新するとき、私は dbContext を直接使用して、小さなエンティティ (つまり、関係がない) を処理するときにエンティティをアタッチしています。複雑なエンティティ (つまり、関係がある) には GraphDiff を使用します。
プロキシと追跡を有効にし、無効にしても、DB に送信される SQL ステートメントには、実際に変更された列だけではなく、テーブルのすべての列が含まれていることに気付きました。
ただし、GraphDiff は変更を DB に保存する前にエンティティを再度ロードしています。この場合の SQL ステートメントには、すべての列も含まれています。これは正しい動作ですか?
私のシナリオでは、切り離されたエンティティを扱っているので、プロキシと追跡を無効にしても安全ですか?
c# - 保存時に 1 つ以上の外部キー プロパティが null 非許容であるため、リレーションシップを変更できませんでした
GraphDiffを使用して切り離されたオブジェクト グラフを更新します。親とその子を保存するときに上記の例外が発生します。
モデルとマッピングは次のとおりです。
挿入と更新の場合、リポジトリに次のメソッドがあります。
私は次のことを行います:
- 新しいグループを追加し、保存してリロードします
- ユーザーをグループに追加し、保存してリロードします
- 2 番目のユーザーを追加し、保存してリロードします
- 3 番目のユーザーを追加し、保存を試みます -> 例外がスローされます
デバッグ中、追加されるユーザー エンティティの状態は常にデタッチされ、新しいエンティティに対して と の両方が 0 に設定されますGroupId
。Id
追加された最初の 2 人のユーザーは正常に保存されます。ただし、3 番目のものでは、例外がスローされます。
いつも同じ方法で保存しているのに、うまくいかないのはなぜですか? それは問題ですEF
かGraphDiff
、この問題を解決する方法はありますか?
ここSOおよび他の場所でのほとんどの質問と関連する回答はすべて、子エンティティが削除されている状況を扱っています。これは、私の特定のシナリオには当てはまりません。
c# - GraphDiff を使用して所有エンティティを 2 レベルの深さで削除する
MVC プロジェクトで最初に Entity Framework コード (バージョン 6) と GraphDiff を使用しています。
データベース内のいくつかのテーブルをマップするエンティティがいくつかあります。
CommunicationPlan
sを持つ多くCommunicationTopic
の sを作成してContributingMember
集約 root を保存するとCommunicationPlan
、GraphDiff はすべてのレコードを作成し、それらをデータベースに関連付けます。(私が正確に望むように)
問題
既存
の の 1 つを削除しようとすると、このトピックはデータベースから削除されます (必要に応じて) 。であり、データベースに存在します。CommunicationTopic
CommunicationPlan
ContributingMember
CommunicationTopic
ContributingMember
Null 値を受け入れないように外部キーを構成すると、次の例外が発生します。
操作に失敗しました: 1 つ以上の外部キー プロパティが null 非許容であるため、リレーションシップを変更できませんでした。リレーションシップに変更が加えられると、関連する外部キー プロパティが null 値に設定されます。外部キーが null 値をサポートしていない場合は、新しい関係を定義するか、外部キー プロパティに別の非 null 値を割り当てるか、関連のないオブジェクトを削除する必要があります。
質問ContributingMember
親が削除されたときに GraphDiff が s レコードを削除するようにエンティティを構成するにはどうすればよいCommunicationTopic
ですか?