【问题标题】:Linq Mapping dbml - capturing stored proc parms for error reportingLinq Mapping dbml - 捕获存储的 proc 参数以报告错误
【发布时间】:2012-11-29 09:09:21
【问题描述】:

在 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 方法之间的一个层,但我认为也许有人遇到了类似的问题,所以我想我会在我花一天时间搞砸之前把它放在那里,直到我得到一个合理的答案.我认为诀窍是枚举参数和过程名称等的优雅方式

我希望这是有道理的,感谢所有反馈

【问题讨论】:

    标签: c# linq linq-to-sql stored-procedures error-handling


    【解决方案1】:

    我认为用其他东西替换MSLinqToSqlGenerator 是最干净的解决方案,并且可以通过多种方式完成。例如,您可以

    1. 使用T4 Toolbox: LINQ to SQL classes generatorReegenerator 之类的工具并修改提供的模板以满足您的需要。这可能是最简单的方法。

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

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

    我不确定哪种方式最适合您的情况,但我可能会考虑先使用 T4 Toolbox。它使用的 T4 模板非常标准,必要时可以轻松修改。

    【讨论】:

      猜你喜欢
      • 2020-05-10
      • 1970-01-01
      • 2019-11-09
      • 2021-10-09
      • 1970-01-01
      • 2019-03-03
      • 2017-12-18
      • 1970-01-01
      • 2022-06-18
      相关资源
      最近更新 更多