2009-02-25 53 views
0

我使用ADO.Net DataServices將實體數據模型公開到Silverlight。該模型有一個返回void的存儲過程。我想從Silverlight客戶端調用此過程。在ADO.Net中執行存儲過程實體框架DataService

我的理解是,我應該爲DataService類添加一個[WebInvoke]方法,並使用DbCommand來調用存儲過程。

這裏是我到目前爲止的代碼:

using System.Data.Common; 
using System.Data.Services; 
using System.ServiceModel.Web; 

namespace Foo.Web 
{ 
    public class PayrollDataService : DataService<Foo.Web.PayrollEntities> 
    { 
     public static void InitializeService(IDataServiceConfiguration config) 
     { 
      config.SetEntitySetAccessRule("*", EntitySetRights.AllRead); 
      config.UseVerboseErrors = true; 
     } 
     [WebInvoke] 
     public void RunMyProcedure() 
     { 
      DbConnection conn = this.CurrentDataSource.Connection; 
      DbCommand cmd = conn.CreateCommand(); 

      // TODO: Call the stored procedure in the EF Data Model. 
     } 
    } 
} 

有人可以確認這是正確的做法,並顯示在這種情況下使用的DbCommand的例子嗎?

回答

1

我有這個問題是爲什麼你在實體框架中運行這個,因爲你什麼都沒有返回,這暗示了你實際上並沒有填充對象。如果這只是一些清理,並不影響數據,我不會在EF中。

使用DBCommand來引發查詢沒有問題,如果這是你的問題。如果你真的影響EF對象,我不會擔心在那裏存儲過程。如果程序不影響EF對象,我會將它與EF分開,而不是將所有東西看作指甲和EF作爲錘子。

+0

有意義

[WebInvoke][WebGet] public void RunMyProcedure(int Param1, string Param2) { this.CurrentDataSource.ImportedFunction(Param1,Param2); } 

然後你就可以從瀏覽器中調用它。我從EF模型和DataServices開始,因爲我認爲存儲過程得到了完全支持。原來,只有在返回實體類型時才支持它們。請參閱:http://stackoverflow.com/questions/578536/function-imports-in-entity-model-with-a-non-entity-return-type – 2009-02-25 18:35:51

0

您必須將您的存儲過程導入到您的edmx模型導入函數中,該函數將返回無並從您的代碼中調用它。就像這樣:HTTP://urltoservice/serviceName.svc/RunMyProcedure?Param1=666 &參數2 = 'stringValue的'