Хранимая процедура Entity Framework недоступна - PullRequest
3 голосов
/ 12 февраля 2010

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

Насколько я понимаю, я смогу использовать его так:

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

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

Ответы [ 2 ]

7 голосов
/ 12 февраля 2010

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

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

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

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

3 голосов
/ 23 апреля 2012

Вы можете выполнить хранимую процедуру с классом 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();
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...