Entity Framework - Table-Valued Functions - Parameter Already Exists -


i using table-valued functions entity framework 5. received error:

a parameter named 'effectivedate' exists in parameter collection. parameter names must unique in parameter collection. parameter name: parameter

it being caused me joining calls table-valued functions taking same parameter.

is bug/limitation ef? there workaround? right auto-generating code (.edmx file).

it nice if microsoft make parameter names unique, @ least on per-context basis.

i've created issue here.

in meantime, able work tweaking few functions in .context.tt file, adds guid each parameter name @ runtime:

private void writefunctionimport(typemapper typemapper, codestringgenerator codestringgenerator, edmfunction edmfunction, string modelnamespace, bool includemergeoption) {     if (typemapper.iscomposable(edmfunction))     { #>      [edmfunction("<#=edmfunction.namespacename#>", "<#=edmfunction.name#>")]     <#=codestringgenerator.composablefunctionmethod(edmfunction, modelnamespace)#>     {       var guid = guid.newguid().tostring("n"); <#+         codestringgenerator.writefunctionparameters(edmfunction, " + guid", writefunctionparameter); #>         <#=codestringgenerator.composablecreatequery(edmfunction, modelnamespace)#>     } <#+     }     else     { #>      <#=codestringgenerator.functionmethod(edmfunction, modelnamespace, includemergeoption)#>     { <#+         codestringgenerator.writefunctionparameters(edmfunction, "", writefunctionparameter); #>         <#=codestringgenerator.executefunction(edmfunction, modelnamespace, includemergeoption)#>     } <#+         if (typemapper.generatemergeoptionfunction(edmfunction, includemergeoption))         {             writefunctionimport(typemapper, codestringgenerator, edmfunction, modelnamespace, includemergeoption: true);         }     } } 

...

public void writefunctionparameters(edmfunction edmfunction, string namesuffix, action<string, string, string, string> writeparameter) {     var parameters = functionimportparameter.create(edmfunction.parameters, _code, _ef);     foreach (var parameter in parameters.where(p => p.needslocalvariable))     {         var isnotnull = parameter.isnullableoft ? parameter.functionparametername + ".hasvalue" : parameter.functionparametername + " != null";         var notnullinit = "new objectparameter(\"" + parameter.esqlparametername + "\"" + namesuffix + ", " + parameter.functionparametername + ")";         var nullinit = "new objectparameter(\"" + parameter.esqlparametername + "\"" + namesuffix + ", typeof(" + parameter.rawclrtypename + "))";         writeparameter(parameter.localvariablename, isnotnull, notnullinit, nullinit);     } } 

...

public string composablecreatequery(edmfunction edmfunction, string modelnamespace) {     var parameters = _typemapper.getparameters(edmfunction);      return string.format(         cultureinfo.invariantculture,         "return ((iobjectcontextadapter)this).objectcontext.createquery<{0}>(\"[{1}].[{2}]({3})\"{4});",         _typemapper.gettypename(_typemapper.getreturntype(edmfunction), modelnamespace),         edmfunction.namespacename,         edmfunction.name,         string.join(", ", parameters.select(p => "@" + p.esqlparametername + "\" + guid + \"").toarray()),         _code.stringbefore(", ", string.join(", ", parameters.select(p => p.executeparametername).toarray()))); } 

Comments

Popular posts from this blog

c++ - CryptStringToBinary API behavior -

c++ - Correct method for redrawing a layered window -

java.util.scanner - How to read and add only numbers to array from a text file -