Начиная с EF4, генерация кода по умолчанию также основана на шаблоне T4.Развернув этот T4, мы увидим, как он генерирует коды для импорта функции:
<code>foreach (EdmFunction edmFunction in container.FunctionImports)
{
IEnumerable<FunctionImportParameter> parameters =
FunctionImportParameter.Create(edmFunction.Parameters, code, ef);
string paramList = string.Join(", ", parameters.Select(p =>
p.FunctionParameterType + " " + p.FunctionParameterName).ToArray());
...
Так что он точно основан на том, как ваша SSDL-схема выглядит под вашей моделью.Например, для
uspUpdateEmployeePersonalInfo SP в
Adventureworks база данных:
CREATE PROCEDURE [HumanResources].[uspUpdateEmployeeHireInfo]
@EmployeeID [int],
@Title [nvarchar](50),
@HireDate [datetime],
@RateChangeDate [datetime],
@Rate [money],
@PayFrequency [tinyint],
@CurrentFlag [dbo].[Flag]
SSDL выглядит следующим образом:
<code><Function Name="uspUpdateEmployeePersonalInfo" Aggregate="false"
BuiltIn="false" NiladicFunction="false" IsComposable="false"
ParameterTypeSemantics="AllowImplicitConversion" Schema="HumanResources">
<Parameter Name="EmployeeID" Type="int" Mode="In" />
<Parameter Name="NationalIDNumber" Type="nvarchar" Mode="In" />
<Parameter Name="BirthDate" Type="datetime" Mode="In" />
<Parameter Name="MaritalStatus" Type="nchar" Mode="In" />
<Parameter Name="Gender" Type="nchar" Mode="In" />
</Function>
И это приведет кэтот код, который будет сгенерирован внутри ObjectContext:
public int UpdateEmployeePersonalInfo(Nullable<global::System.Int32> employeeID,
global::System.String nationalIDNumber,
Nullable<global::System.DateTime> birthDate,
global::System.String maritalStatus,
global::System.String gender)
Я предполагаю, что порядок свойств в вашей схеме SSDL в вашей модели был изменен, и EF генерирует новые коды, соответствующие этому.Поэтому после проверки того, что параметры объявлены в нужном порядке в вашем SP внутри базы данных, попробуйте удалить SP из вашей модели и обновить вашу модель из базы данных еще раз, и вы увидите, что сгенерированный код метода будет изменен соответствующим образом.