2012-02-06 46 views
1

下面的代碼應該在我的數據庫中運行sys.sp_setapprole存儲過程。它不是。由於代碼現在我得到一個System.InvalidOperationException與以下內部異常The FunctionImport 'sp_setapprole' could not be found in the container 'XXX'如何從Entity Framework執行系統存儲過程?

任何想法如何執行此存儲過程?

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'.

回答

0

發現的解決方案here

+1

你不應該簡單地發佈鏈接作爲一個解決方案,特別是當鏈接是一種替代方法來調用未使用實體框架的過程。 Ladislav下面的答案是正確的。 – 2013-06-13 14:55:35

4

使用SqlConnectionSqlCommand。通過EntityCommand從EF執行存儲過程需要function import並且不支持系統過程的函數導入,因爲在從數據庫更新EDMX模型時,在嚮導中看不到常見的系統存儲過程。

相關問題