首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EntityFramework 5.0和TVP不合作

EntityFramework 5.0和TVP不合作
EN

Stack Overflow用户
提问于 2014-05-01 16:32:01
回答 1查看 1.2K关注 0票数 1

我有一个sproc接受tvp作为参数。我对它进行了测试,它在db端运行得很好。现在,在我的c#项目中,我尝试在edmx中添加sproc并获得以下错误。

消息8函数'usp_MysprocName‘在参数索引0处有一个参数'ParameterNameTVP’,该参数索引具有数据类型“表类型”,目前目标.NET框架版本不支持该类型。这一职能被排除在外。

我将我的.net框架从4.0升级到4.5,并重新安装(因此它可以通过nuget使用新的.net 4.5)实体框架库,但仍然显示了相同的错误。我发现这里实体框架5.0是支持表值函数的(我必须使用5.0版本,而不是最新的6)。就.net框架而言,我使用的是最新版本。我不知道为什么VS不允许我导入或添加新的sproc。有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2014-05-16 14:12:38

实体框架不支持TVP的存储过程,但是支持表值函数,但它不是一回事。为了获得类似的结果,我必须更改参数的数据类型并使用xml。然后,我编写了一个TVF来读取xml并返回一个要加入的表。

假设您传递一个xml,如下所示:

代码语言:javascript
复制
 <list>         <id>1</id>     </list>     
代码语言:javascript
复制
create function [dbo].[XMLToTable] (@xml xml)
returns table
as
return (
--get the ids from the xml
select Item.value('.', 'int') as id from @xml.nodes('//id') as T(Item)
)

你的选择就像

代码语言:javascript
复制
select t.* from MyTable t
inner join dbo.XMLToTable(@myXmlParam) x on x.id = t.id

EF将把它作为一个字符串参数来处理,您只需传递它。这相对较快,因为它使用内联表值函数。不幸的是,这是一个解决办法,直到EF决定支持TVP。

请在此更新功能请求:http://data.uservoice.com/forums/72025-entity-framework-feature-suggestions/status/317789

编辑:下面是一个稍微复杂一些的例子,说明如何处理多个值:

代码语言:javascript
复制
declare @xml xml = 
'
<complex>
    <companies>
        <id>123456</id>
        <name>My Company</name>
    </companies>
    <companies>
        <id>147889</id>
        <name>Some Co</name>
    </companies>
</complex>
'

declare @tbl table (id int, name varchar(50))

insert into @tbl values (123456, 'My Company'),
            (147889, 'Some Co'),
            (788545, 'Great Corp')


select * from @tbl co
left join dbo.XMLCompanies(@xml) x on x.id = co.id

create function [dbo].[XMLCompanies] (@xml xml)
returns table
as
return (
--get the ids from the xml
select 
     id=Item.value('./id[1]', 'int')
    ,name=Item.value('./name[1]', 'varchar(50)')
from @xml.nodes('//companies') as T(Item)
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23412040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档