4

Visual Studio で dbml 自動生成を使用すると、通常、ストアド プロシージャの呼び出しは次のようになります。

    [global::System.Data.Linq.Mapping.FunctionAttribute(Name="MYDB.ui_index_group_upd")]
    public int ui_index_group_upd([global::System.Data.Linq.Mapping.ParameterAttribute(DbType="Int")] System.Nullable<int> group_id, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType="VarChar(32)")] string group_code)
    {
        IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), group_id, group_code);
        return ((int)(result.ReturnValue));
    }

これは通常、次のように呼ばれます....

  using (var db = new L2SDataContext(base._connectionString))
  {
    var result = db.ui_index_group_upd(1, "foo");
  }

これで問題ありません。

ただし、私が達成しようとしているのは、問題が発生した場合に渡されたすべてのパラメーターの値と proc の名前を記録するような方法で、そのようなすべてのメソッド呼び出しをエラー トラップおよび報告するグローバルな方法です。

メソッドごとに特定のコード proc コードを記述したくないし、明らかな理由から autogen コードを変更したくないことは間違いありません。

私は自分の呼び出しと dbml メソッドの間のレイヤーを考えていますが、おそらく誰かが同様の問題に遭遇したのではないかと思ったので、合理的な答えが得られるまで一日を過ごす前にそれを公開したいと思いました。トリックは、パラメーターやプロシージャ名などを列挙する優雅な方法だと思います

これが理にかなっていることを願っています。すべてのフィードバックに感謝します

4

1 に答える 1

2

MSLinqToSqlGenerator他のものに置き換えることが最もクリーンな解決策であり、いくつかの方法で行うことができると思います。たとえば、次のことができます。

  1. T4 Toolbox: LINQ to SQL classes generatorまたはReegeneratorなどのツールを使用し、必要に応じて提供されたテンプレートを変更します。それがおそらく最も簡単な方法です。

  2. カスタム テンプレートを使用してT4でコードを生成します。.DBML ファイルのXML データを使用する T4 テンプレートを作成する必要があります。カスタム ツール プロパティを空白に設定して、DBML コード生成を無効にする必要がある場合があります。欠点は、.DBML ファイルを変更した後、毎回 T4 生成を実行する必要があることです。

  3. カスタム ツールを作成して、.DBML ファイルの XML データといくつかのテンプレート ソリューション (おそらく T4 または XSLT) を使用してコードを生成します。このアプローチは間違いなく最も柔軟な方法ですが、唯一の欠点は、すべての開発者のマシンでカスタム ツールを使用する必要があることです。

あなたの状況に何が最適かはわかりませんが、おそらく最初に T4 Toolbox を使用することを検討します。使用する T4 テンプレートは非常に標準的で、必要に応じて簡単に変更できます。

于 2012-12-03T19:32:03.093 に答える