使用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服务器?这似乎是对网络资源的巨大浪费。
答案 0 :(得分:1)
使用varbinary而不是binary。对我有帮助
答案 1 :(得分:0)
EF 4总是使用较大的参数,因为使用param-size = data-size主要意味着查询无法与新的参数值一起使用,因此SQL无法为您缓存查询。换句话说,如果您的数据大小发生变化,它现在所做的事情可能比使用更小的参数更有效。
如果您的数据大小永远不会更改,请使用不同的列宽。