2

私はデバッグが非常に難しいと感じているEFの問題に取り組んでいます...以前は、システム内のさまざまなユーザータイプを管理するタイプごとのテーブル継承設定がありました-1つのルートタイプはすべてのユーザーに共通であり、いくつかはそのアカウントを使用している人のタイプに大まかに基づいたさまざまなサブタイプ。今、私は継承を削除し、代わりにユーザーのIdプロパティへの外部キーである各サブクラスにUserIdプロパティを配置する必要がある問題に遭遇しました。そのため、ユーザーではなく、他のユーザータイプにユーザーナビゲーションプロパティが追加されます。

EDMXデザイナーを使用してすべての継承の関連付けを削除し、すべてのUserIdプロパティとその関連付けを追加し、他のすべてのユーザータイプが独自のエンティティキーを持っていることを確認し、ユーザーセットの関連付けとナビゲーションプロパティを取得しましたそれぞれの特定について。ただし、実際にアプリケーションを実行すると、「ユーザーは(他のタイプ)のスーパータイプでもサブタイプでもありません」というメッセージとともにTargetInvocationExceptionが表示されます。

このエラーメッセージへの他の参照を少し探していましたが、何も見つかりませんでした。原因を特定できません。ユーザーとEDMXの他のタイプとの間の継承についての参照はもうないようですが、それでもメッセージは持続します。私が知っている人は誰もそれを見たことがありません。

参照用に提供できるコードは実際にはありません。マッピングの問題のようです。誰かが以前にこの特定のメッセージの例外を見たことがありますか?

4

1 に答える 1

0

私が疑っていたように、問題は実際には EDMX の内部ではなかったことが判明しました。通常、マッピングに問題がある場合、エンティティのリポジトリを反射的にインスタンス化しようとした時点で、コードは常に同じ行で爆発します。ここで例外がスローされたので、マッピングの問題だと思いましたが、プロジェクトのカスタム エラーをオフにすると、別の開発者が特定のリポジトリのコンストラクター内に への呼び出しを挿入したことがわかりましたObjectContext.CreateObjectSet<User>().OfType<(user sub-category type)>()。これが問題の原因でした。リポジトリのコンストラクターが反射的に呼び出されたため、デバッグ中に例外がこの行を表示しなかったと思われます。この呼び出しを変更すると、すべてが機能します。

于 2012-06-20T15:57:30.340 に答える