そのようなロジックでコントローラーをいじくりまわしたくないのは私の理解です。コントローラに属するものは、ビューに渡されるモデルを定義するか、検証をオンまたはオフにします。コントローラが制御する必要のあるビュー関連のものは他にもいくつかありますが、それはほんの2、3です。私が言いたいのは、コントローラーがサービスまたはモックされたリポジトリーを呼び出してモデルを作成し、それらのモデルをビューに渡す責任があるということです。
あなたが説明していることを行うために、データアクセス層の上にあるサービス層を追加します(dal-EDMXとリポジトリが置かれている場所)。そのサービスレイヤーの内部では、メソッドまたはサービスを呼び出してPDFを生成し、電子メールを送信します。
リポジトリとデータアクセス層は、データベースのクエリとレコードの取得のみに関係する必要があります。これは、使用するORMまたはデータアクセスツールに関係ありません。取得されたレコードはサービスレイヤーに渡され、そこでデータに対してアクション(検証やPDFの送信など)を実行できます。次に、ビューに表示する必要のあるレコードの形式に関係なく、プレゼンテーションレイヤーが返されます。コントローラは、取得したデータに対して論理的なアクションを実行せず、代わりにデータをビューに渡します。
私が説明したアーキテクチャのレイアウトについてさらに詳しく知りたい場合は、それについてさらに洞察を提供させていただきます。