Как вызвать хранимую процедуру из Entity Framework, которая не имеет возвращаемых данных? - PullRequest
1 голос
/ 12 октября 2011

Я пытаюсь использовать хранимую процедуру в своей Entity Framaework 4.

Я создал модель сущности и вижу сохраненный процесс из Браузера моделей в папке Хранимая процедура.Я добавил сохраненный процесс через функциональный импорт.У моего хранимого процесса нет возвращаемого типа.Теперь, когда я пытаюсь вызвать сохраненный процесс в контексте объекта (бизнес-уровень), я не вижу сохраненный процесс в интеллекте.Есть ли какая-либо ошибка, которую я делаю?

Примечание: Я могу видеть другие процедуры, если они имеют возвращаемые значения.Вот в этом специальном случае, которые не имеют никаких возвращаемых значений

Ответы [ 2 ]

2 голосов
/ 12 октября 2011

Шаблон генерации POCO по некоторым причинам игнорирует импорт функций, которые не имеют возвращаемого типа.Я действительно не знаю, почему они это сделали, но вы можете исправить это, изменив шаблон.Я помню, что я делал это тоже до того, как уронил всю вещь EF-POCO.Вы используете POCO с EF?Чтобы это исправить, вам нужно открыть файл шаблона .tt.По сути, я просто скопировал цикл для обычного импорта функций и немного его изменил.То, что я добавил, было

foreach (EdmFunction edmFunction in container.FunctionImports)
{
    var parameters = FunctionImportParameter.Create(edmFunction.Parameters, code, ef);
    string paramList = String.Join(", ", parameters.Select(p => p.FunctionParameterType + " " + p.FunctionParameterName).ToArray());
    if (edmFunction.ReturnParameter != null)
    {
        continue;
    }

#>
<#=Accessibility.ForMethod(edmFunction)#> void <#=code.Escape(edmFunction)#>(<#=paramList#>)
{
<#
    foreach (var parameter in parameters)
    {
        if (!parameter.NeedsLocalVariable)
        {
            continue;
        }
#>

    ObjectParameter <#=parameter.LocalVariableName#>;

    if (<#=parameter.IsNullableOfT ? parameter.FunctionParameterName + ".HasValue" : parameter.FunctionParameterName + " != null"#>)
    {
        <#=parameter.LocalVariableName#> = new ObjectParameter("<#=parameter.EsqlParameterName#>", <#=parameter.FunctionParameterName#>);
    }
    else
    {
        <#=parameter.LocalVariableName#> = new ObjectParameter("<#=parameter.EsqlParameterName#>", typeof(<#=parameter.RawClrTypeName#>));
    }
<#
    }
#>
    base.ExecuteFunction("<#=edmFunction.Name#>"<#=code.StringBefore(", ", String.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray()))#>);
}
<#
}

Вы можете найти связанный вопрос здесь: FunctionImport в платформе сущностей 4, выпуск

0 голосов
/ 12 октября 2011

Вам необходимо сопоставить процедуру с операцией чтения или удаления, иначе нет смысла отображать ее. Альтернативой является выполнение его непосредственно в контексте.

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