LINQ to SQL包含存储过程和用户​​定义的表类型参数

时间:2009-06-19 18:29:53

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

我在SQL Server 2008中使用LINQ to SQL和存储过程。除了一个问题外,一切都运行良好。 L2S无法为用户定义的表类型作为参数生成存储过程的方法。 dbml设计面板中的方法签名使用对象作为参数类型而不是表类型,当我尝试编译时出现错误:

Error: DBML1005: Mapping between DbType 'Structured' and
Type 'System.Object' in Parameter 'ParaName' of Function 'dbo.StoredProcName'
is not supported. 

有没有办法解决这个问题?我不想回到传统的ADO.NET数据访问。

3 个答案:

答案 0 :(得分:16)

我认为现在没有任何可用的东西 - 在SQL Server 2008中引入了表值参数 - 在LINQ和LINQ2SQL已经出局之后。

到目前为止,我在博客文章中没有发现任何关于支持.NET 4.0中LINQ2SQL中的表值参数的内容。

<强>更新
这是关于.NET 4.0时间框架中Linq-to-SQL的修复和改进的blog post by Damien Guard

更新2:
不幸的是,根据Damien的说法,.NET 3.5不支持此功能,.NET 4.0也不支持此功能: - (

目前无法在3.5或4.0中完成 :([] amien

答案 1 :(得分:4)

我遇到了这个post,它提供了一种使用Linq2Sql中的TVP参数调用存储过程的方法。它是一个round方法,基本上创建dataContext的部分类扩展,并使用SqlCommand传递dataTable。我希望它有所帮助。

答案 2 :(得分:0)

我遇到了完全相同的问题,来自以下链接的Ryan Prechel的示例代码帮助我解决了这个问题。

How to pass table value parameters to stored procedure from .net code