Я только что проверил это, потому что это очень необычный сценарий.
Хранимая процедура следует очень странному соглашению об именах, потому что @@ не должен использоваться.По умолчанию он используется некоторыми системными переменными SQL-сервера и не должен использоваться ни для чего другого.Использование @x
в качестве параметра хранимой процедуры определяет параметр x
, но использование @@x
определит параметр @x
- @ является частью имени параметра!
Это очень большая проблема в C #, потому что @это управляющий символ, используемый для определения имен переменных, аналогичных зарезервированным ключевым словам.Например:
string @string = "abc";
определяет переменную с именем string
.Имя переменной не может начинаться с @.
Платформа сущностей справляется с этим, заменяя все @
на _
и добавляя префикс имени параметра к p
непосредственно в SSDL.Причина заключается в том, что импорт функций, созданный из сопоставленной хранимой процедуры SSDL, должен иметь параметры с тем же именем, что и у процедуры, но в то же время @ не допускается начальный символ.Если вы попытаетесь изменить EDMX вручную, он не сможет выполнить свою собственную проверку XSD, потому что @ не допускается начальный символ для идентификаторов, определенных в CSDL.
Даже это, вероятно, можно рассматривать как ошибку, скорее, отсутствует возможность изменитьимя параметра в CSDL.На данный момент это сделано специально, и единственный способ - исправить имена параметров в хранимой процедуре SQL.