将编译好的 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 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

自定义 Linq-to-SQL 映射源

LINQ(LINQ to DataSet)

Linq to sql,聚合列,按日期分组到列表视图

Linq to Sql 与动态数据库

在运行时将实体对象添加到 LINQ-to-SQL 数据上下文 - SQL、C#(WPF)

LINQ to Sql 左外连接与 Group By 和 Have 子句