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 generatorReegenerator之类的工具,并修改提供的模板以满足您的需要。这可能是最简单的方法。

  2. 使用自定义模板通过T4生成代码。您将需要创建一个 T4 模板,该模板将使用 .DBML 文件中的 XML 数据。您可能需要通过将自定义工具属性设置为空白来禁用 DBML 代码生成。缺点是每次修改 .DBML 文件后都需要运行 T4 生成。

  3. 创建一个自定义工具,使用来自 .DBML 文件的 XML 数据和一些模板解决方案(可能是 T4 或 XSLT)为您生成代码。这种方法可以说是最灵活的一种,唯一的缺点是您必须在每个开发人员的机器上使用自定义工具。

我不确定什么最适合您的情况,但我可能会首先考虑使用 T4 Toolbox。它使用的 T4 模板非常标准,如有必要,可以轻松修改。

于 2012-12-03T19:32:03.093 回答