将编译好的 Linq To SQL 与 ExecuteMethodCall 一起使用
Posted
技术标签:
【中文标题】将编译好的 Linq To SQL 与 ExecuteMethodCall 一起使用【英文标题】:Using Compiled Linq To SQL with ExecuteMethodCall 【发布时间】:2012-11-12 01:57:28 【问题描述】:我们非常庞大的代码库有数百次对 ExecuteMethodCall 的调用,遵循以下模式:
[Function(Name = "dbo.storedproc")]
public ISingleResult<UserData> GetUserData(
[Parameter(Name = "UserId", DbType = "BigInt")] long? userId)
IExecuteResult result = ExecuteMethodCall(this, ((MethodInfo)(MethodBase.GetCurrentMethod())), userId);
return ((ISingleResult<UserData>)(result.ReturnValue));
然而,这会带来巨大的性能问题(Linq To SQL 的众所周知的问题)。所以我正在考虑将至少部分代码转换为 Compiled Linq To Sql。
我找到了 Compiled Linq To Sql 的示例,但没有一个涉及 ExecuteMethodCall。相反,它们都编译一个 Linq 查询(从 ... where ... select)。
如果有人能给我一个将上述代码(使用 ExecuteMethodCall)转换为 Compiled Linq To SQL 的示例,我将不胜感激。
【问题讨论】:
你在微软博客上看到这个帖子了吗?Linq to SQL Stored Procedures - Guy Burstein's Blog我觉得可能有用 请阅读那篇文章。但是,它没有显示如何将 ExecuteMethodCall 与已编译的 linq to sql 查询一起使用。 性能问题到底出在哪里?是GetCurrentMethod()
让你放慢了速度还是完全是别的什么?
【参考方案1】:
select * from user where userid = userId (方法的参数),
SP: exec GetUserData @userId = userId
【讨论】:
以上是关于将编译好的 Linq To SQL 与 ExecuteMethodCall 一起使用的主要内容,如果未能解决你的问题,请参考以下文章