問題タブ [ef-code-first-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.

0 投票する
0 に答える
176 参照

c# - 論理的に削除された子オブジェクトが親オブジェクト リストに表示される

最初に Entity Framework Core 2.2 コードを使用しています。論理的な削除は、オーバーライドされた Context クラスに実装されています。コンストラクターでコンテキストを引数として取りながら、特定のエンティティのリポジトリを初期化する UnitOfWork クラスがあります。概要を明確にするために、このサンプルでは一部のアプリケーション エンティティが省略されています。チーム、メンバー、プロジェクト、および従業員のみを使用します。

テスト中に、次のことに気付きました: オブジェクト (たとえば、プロジェクト) を削除すると、SaveChanges() の後で、その "Deleted" プロパティが "true" に正常に設定されます。ただし、ソリューション プロジェクトがまだ実行されている場合、このオブジェクト (プロジェクト) に親オブジェクト (チーム) がある場合、「削除済み」プロパティが明らかに「true」であっても、チームのリスト プロジェクトに表示されることに気付きました。プロセスがまだ実行されている間に、すべてのプロジェクトを返すリポジトリの Get() メソッドを呼び出すと、削除されたプロジェクトは返されたプロジェクト リストには表示されず、チームのリスト プロジェクトにのみ表示されます。ソリューション プロジェクトを再実行すると、これらの子オブジェクトが親のリスト プロジェクトに表示されなくなります。

問題を分析するために作成した NUnit テストを次に示します。

これは、リストに子オブジェクトがある場合、オブジェクトの削除を許可しない、TeamsRepository に実装した Delete メソッドに干渉します。つまり、以前のテストでチームを削除したい場合、彼のプロジェクトをすべて削除したとしても、アプリを再起動しないと削除できません (リポジトリ全体は以下にあります)。

これが遅延読み込みを使用している場合の通常の動作なのか、それとも構成に何かが欠けていたのか疑問に思っています。

これはチーム エンティティです。

オーバーライドされたメソッドを持つ汎用リポジトリと特定の TeamsRepository。論理的に削除されたプロジェクトは old.Projects.Count に表示されるため、この方法でチームを削除することはできません (たとえそれらが取得されなかったとしても)