2010-12-09 77 views
1

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

我正在尝试使用SQLDataAdapter等整合旧式存储过程,但我希望我仍然可以绑定到LINQ,这样我就不需要管理单独的事务机制了灾难。

这可能吗?谢谢。

回答

2

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

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

1

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

实体框架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

如果您使用的实体框架1与.NET 3.5一起提供,那么没有EF无法感知存储的proc数据的形状。

+0

感谢您的回复。我查看了页面,看起来您必须在存储过程模式更改时进行手动更改。我情况中的问题是SP根据每个呼叫动态更改。 – skaz 2010-12-09 19:06:50

+0

@skaz:你能发布更多信息吗?那么我们可以帮助您做出更好的设计或开发决定。 – DarrellNorton 2010-12-09 19:51:01