【问题标题】:Manually Link Stored Procedure To LINQ手动将存储过程链接到 LINQ
【发布时间】:2010-12-09 18:44:13
【问题描述】:

我有一个基于临时表返回动态结果集的存储过程。我的项目使用 LINQ 进行数据访问,但我不能将 LINQ 与此存储过程结合起来,因为它具有动态“形状”(我不能事先说哪些列会返回或会有多少列),所以 LINQ无法在设计时生成可以保存结果的对象。

我正在尝试使用 SQLDataAdapter 等集成老式的存储过程,但我希望我仍然可以绑定到 LINQ,这样我就不需要管理单独的事务机制,因为那将是一个灾难。

这可能吗?谢谢。

【问题讨论】:

    标签: c# sql-server linq-to-sql stored-procedures


    【解决方案1】:

    一个最佳实践是,存储过程不应该被编码为根据输入在结果集中给出不同的列。

    听起来您的设计导致单个存储过程尝试做太多事情。我强烈建议你改变这个。

    【讨论】:

    • 存储过程正在尝试返回一个网格。网格的列是不同的年份,但我们不提前知道哪些数据将返回哪些年份,这就是为什么我们有动态列数的原因。以前,我们将所有数据拉回来,然后就在哪里显示哪些列做出业务逻辑决策,但这会导致性能问题。谁能建议一种替代方法?
    【解决方案2】:

    首先 - 您没有使用“LINQ”进行数据访问。我的猜测是您正在使用实体框架进行数据访问。如果是,则取决于您使用的 EF 版本。

    Entity Framework 4 中的新功能是对存储过程中的数据进行整形。有关分步说明,请参阅此博客文章:http://blogs.msdn.com/b/nihitk/archive/2010/04/23/ado-net-entity-designer-in-vs-2010-stored-procedure-return-type-shape-sensing.aspx

    如果您使用的是 .NET 3.5 附带的 Entity Framework 1,那么任何 EF 都无法感知存储的 proc 数据的形状。

    【讨论】:

    • 感谢您的回复。我查看了该页面,看起来您必须在存储过程架构更改时进行手动更改。我的问题是 SP 会根据每次调用动态变化。
    • @skaz:你能发布更多信息吗?然后我们可以帮助您做出更好的设计或开发决策。
    • 由于 OP 将问题标记为 LINQ to SQL,我敢打赌他们正在使用 LINQ to SQL 进行数据访问。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    相关资源
    最近更新 更多