Как выполнить системную хранимую процедуру из Entity Framework? - PullRequest
1 голос
/ 06 февраля 2012

Следующий код должен запускать хранимую процедуру sys.sp_setapprole в моей базе данных.Это не.Поскольку код работает прямо сейчас, я получаю System.InvalidOperationException со следующим внутренним исключением The FunctionImport 'sp_setapprole' could not be found in the container 'XXX'.

Есть мысли, как я могу выполнить эту хранимую процедуру?

partial void OnContextCreated()
{
    this.Connection.StateChange += (sender, args) =>
    {
        if (args.CurrentState == ConnectionState.Open)
        {
                var conn = (EntityConnection)sender;
                EntityCommand cmd = conn.CreateCommand();
                cmd.CommandText = "XXX.sp_setapprole";  
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("rolename", "XXX");
                cmd.Parameters.AddWithValue("password", "XXX");
                cmd.ExecuteScalar();
        }
    };


}

Обновление 1- Использование SqlConnection и SqlCommand вызывает InvalidCastException, "Unable to cast object of type 'System.Data.EntityClient.EntityConnection' to type 'System.Data.SqlClient.SqlConnection'."

Ответы [ 2 ]

4 голосов
/ 06 февраля 2012

Используйте SqlConnection и SqlCommand.Для выполнения хранимой процедуры из EF через EntityCommand требуется импорт функции , а импорт функции для системных процедур не поддерживается, по крайней мере, разработчиком, поскольку вы не видите общих системных хранимых процедур в мастере при обновлении модели EDMX.из базы данных.

0 голосов
/ 07 февраля 2012

Решение найдено здесь :

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