在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方法之间的一层,但我可能有人遇到了类似的问题所以我想我会把它放在那里,然后我花一天时间搞乱,直到我得到一个合理的答案.我认为诀窍是一种优雅的方式来枚举parms和proc名称等等
我希望这是有道理的,所有反馈都值得赞赏
最佳答案 我认为用其他东西替换MSLinqToSqlGenerator是最干净的解决方案,它可能以多种方式完成.例如,你可以
>使用T4 Toolbox: LINQ to SQL classes generator或Reegenerator等工具,修改提供的模板以满足您的需求.这可能是最简单的方法.
>使用自定义模板使用T4生成代码.您需要创建一个T4模板,该模板将来自.DBML文件的use XML data.您可能需要通过将“自定义工具”属性设置为空来禁用DBML代码生成.缺点是每次修改.DBML文件后都需要运行T4代.
>创建一个custom tool,使用.DBML文件中的XML数据和一些模板解决方案(可能是T4或XSLT)为您生成代码.这种方法可以说是最灵活的方法,唯一的缺点是你必须在每个开发人员的机器上使用自定义工具.
我不确定什么是最适合你的情况,但我可能会考虑先使用T4 Toolbox.它使用的T4模板非常标准,如果需要可以轻松修改.