Хранимая процедура Entity Framework недоступна

c# entity-framework stored-procedures

Вопрос

Я добавил ссылку на хранимую процедуру в мой файл edmx, затем щелкнул правой кнопкой мыши по ней и выбрал «Создать импорт функции», он был добавлен в папку «Импорт функций» в EntityContainer в браузере модели.

Насколько я понимаю, я должен быть в состоянии использовать это так:

sampleEntities db = new sampleEntities();
db.SampleStoredProcedure();

но он не отображается на объекте БД. Есть ли шаг, который я пропускаю? Функция импорта имеет общедоступный характер, не имеет возвращаемого значения и одного параметра, который я вижу, когда раскрываю его.

Принятый ответ

Ваша хранимая процедура возвращает простое (то есть скалярное ) значение? Если это так, дизайнер не будет генерировать код для вас :

Если тип возвращаемого значения установлен в простой тип, Visual Basic или C # не создаются автоматически для импорта функций.

Однако это было исправлено в самой последней версии Entity Framework :

Вы можете выбрать тип возврата None и Scalar, как и раньше. Однако, когда создается «Импорт функции», в код модели за файлом внедряется новый код, который материализует хранимую процедуру в операцию над самим ObjectContext.


Популярные ответы

Вы можете выполнить хранимую процедуру с классом EntityCommand, добавить новую хранимую процедуру в модель данных объекта, затем добавить ее в качестве функции и назвать ее, а затем выполнить хранимую процедуру:

public bool ExecuteCMD(string Command) 
{
    using (var entities = new DbEntities())
    {
        var conn = new System.Data.EntityClient.EntityConnection(entities.Connection.ConnectionString);
        try
        {
            conn.Open();
            using (EntityCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = "DbEntities." + Command;
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.ExecuteNonQuery();
            }
            return true;
        }
        catch
        {
            return false;
        }
        finally
        {
            if (conn != null)
            {
                conn.Close();
            }
        }
    }
}


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему