i've generated entity framework model sql server 2005 database , started import stored procedures. far good, 1 of stored procedures throws exception when try run it:
procedure or function 'csp_getcoworker' expects parameter '@@firstname', not supplied.
here signature stored procedure:
alter procedure [dbo].[csp_getcoworker]( @@firstname nvarchar(32), @@lastname nvarchar(32), @@businessarea nvarchar(512), @@location nvarchar(512) )
and here code generated entity framework
objectparameter p_firstnameparameter; if (p_firstname != null) { p_firstnameparameter = new objectparameter("p_firstname", p_firstname); } else { p_firstnameparameter = new objectparameter("p_firstname", typeof(global::system.string)); } [...] return base.executefunction<csp_getcoworker_result2>("csp_getcoworker", p_firstnameparameter, p_lastnameparameter, p_businessareaparameter, p_locationparameter);
is double @-characters in parameter name that's messing things up?
i tested because uncommon scenario.
the stored procedure follows strange naming convention because @@ should not used. default used sql server system variables , should not used else. using @x
parameter of stored procedure defines parameter x
using @@x
define parameter @x
- @ part of parameter name!
this big problem in c# because @ escape character used define names of variables same reserved keywords. example:
string @string = "abc";
defines variable named string
. variable name cannot start @.
entity framework deals replacing @
_
, prefixing parameter's name p
directly in ssdl. reason function imports created ssdl mapped stored procedure must have parameters same name procedure in same time @ not allowed starting character. if try modify edmx manually fail own xsd validation because @ not allowed starting character identifiers defined in csdl.
even can considered bug more missing possibility change name of parameter in csdl. @ moment design , way correct names of parameters in sql stored procedure.
Comments
Post a Comment