使用Entity Framework使用固定长度二进制参数调用存储过程

时间:2010-05-03 16:42:44

标签: entity-framework-4

使用Entity Framework调用带有固定长度二进制参数的存储过程时遇到问题。无论使用什么大小的字节数组调用函数import,存储过程最终都会被8000字节的数据调用。举个例子,这是我正在使用的代码。

byte[] cookie = new byte[32];  
 byte[] data = new byte[2];  
entities.Insert("param1", "param2", cookie, data);

参数为nvarchar(50)nvarchar(50)binary(32)varbinary(2000)

当我通过SQL分析器运行代码时,我得到了这个结果。

exec [dbo].[Insert] @param1=N'param1',@param2=N'param2',@cookie=0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

[因为16000个零的SNIP]

,@data=0x0000

除了binary(32) cookie之外,所有参数都通过了ok。 varbinary(2000)似乎工作正常,并保持正确的长度。

有没有办法防止额外的数据被发送到SQL服务器?这似乎是对网络资源的巨大浪费。

2 个答案:

答案 0 :(得分:1)

使用varbinary而不是binary。对我有帮助

答案 1 :(得分:0)

EF 4总是使用较大的参数,因为使用param-size = data-size主要意味着查询无法与新的参数值一起使用,因此SQL无法为您缓存查询。换句话说,如果您的数据大小发生变化,它现在所做的事情可能比使用更小的参数更有效。

如果您的数据大小永远不会更改,请使用不同的列宽。