如何从Entity Framework执行系统存储过程?

时间:2012-02-06 18:37:23

标签: entity-framework-4

以下代码应该在我的数据库中运行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 - 使用SqlConnectionSqlCommand会导致InvalidCastException,“Unable to cast object of type 'System.Data.EntityClient.EntityConnection' to type 'System.Data.SqlClient.SqlConnection'.

2 个答案:

答案 0 :(得分:4)

使用SqlConnectionSqlCommand。通过EntityCommand从EF执行存储过程需要function import,系统过程的函数导入至少不支持设计器,因为在更新EDMX模型时,向导中没有看到常用的系统存储过程数据库。

答案 1 :(得分:0)

找到解决方案here