Вызов хранимой процедуры с двоичным параметром фиксированной длины с использованием Entity Framework - PullRequest
0 голосов
/ 03 мая 2010

У меня проблема с вызовом хранимых процедур с двоичным параметром фиксированной длины с использованием Entity Framework. Хранимая процедура в конечном итоге вызывается с 8000 байтов данных независимо от размера массива байтов, который я использую для вызова функции import. Для примера приведу код, который я использую.

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

[SNIP из-за 16000 нулей]

,@data=0x0000

Все параметры прошли нормально, кроме binary(32) cookie. varbinary(2000), казалось, работал нормально, и правильная длина была сохранена.

Есть ли способ предотвратить отправку дополнительных данных на сервер SQL? Это кажется большой тратой сетевого ресурса.

Ответы [ 2 ]

1 голос
/ 26 октября 2011

Используйте varbinary вместо двоичного. Полезно для меня

0 голосов
/ 04 мая 2010

EF 4 всегда использует большие параметры, потому что использование param-size = data-size в основном означает, что запрос не может быть повторно использован с новыми значениями параметров, поэтому SQL не может кешировать запросы для вас. Другими словами, то, что он делает сейчас, вероятно, более эффективно, чем использование меньшего параметра, если размер ваших данных когда-либо изменится.

Если размер данных никогда не изменяется, используйте другую ширину столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...