2010-02-25 17 views
0

我有一個實體模型文件(EDMX)文件,其中包含幾個表和少數存儲過程。使用存儲過程作爲EDMX文件的函數

我該如何調用那些映射到函數的存儲過程?我認爲這應該是微不足道的,我看到在EDMX文件中的映射,但我不知道如何在代碼中使用它。

這裏是一個映射例如:

 <Function Name="pa_crud_broker_ADD" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="false" ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo"> 
      <Parameter Name="BrokerId" Type="int" Mode="InOut" /> 
      <Parameter Name="Name" Type="nvarchar" Mode="In" /> 
      <Parameter Name="Identifier" Type="nvarchar" Mode="In" /> 
     </Function> 

      <FunctionImport Name="pa_crud_broker_ADD" ReturnType="Collection(Int32)"> 
      <Parameter Name="BrokerId" Mode="InOut" Type="Int32" /> 
      <Parameter Name="Name" Mode="In" Type="String" /> 
      <Parameter Name="Identifier" Mode="In" Type="String" /></FunctionImport> 
<FunctionImportMapping FunctionImportName="pa_crud_broker_ADD" FunctionName="PAEntities.store.pa_crud_broker_ADD" /> 

我希望得到任何幫助。

謝謝。

+0

我還注意到,如果我的函數(即映射存儲過程)返回實體模塊中的實體,我確實看到它。但如果它返回一個前綴類型,它不會出現。所以我如何運行一個存儲過程返回int例如? – 2010-02-25 04:37:03

回答

3

我有點生疏,但你應該能夠調用你的函數通過以下兩種方式之一。如果你從你的模型中生成一個ObjectContext,那麼你的對象上下文應該有一個與你的函數名相匹配的方法(在你的情況下,pa_crud_broker_ADD)。你應該能夠調用它像這樣:

var objectContext = new MyObjectContext(...); 
var result = objectContext.pa_crud_broker_ADD(...); 

如果你不是從你的模型生成ObjectContext的,那麼你應該能夠使用以下命令:

var objectContext = new ObjectContext(...); 
var result = objectContext.ExecuteFunction<List<int>>("pa_crud_broker_ADD", ...); 

我不能完全肯定關於第二種情況下的退貨結果。我不確定EF v1是否支持這種轉換。我知道EF v4在這方面做了一些相當大的改進,所以如果EF v1不支持它,我會考慮EF v4。

-2

我的印象是,你不能調用存儲過程...實體框架爲你調用它們...基本上存儲過程是實時SQL生成的可選替代,實體框架根據需要調用它們。

我還沒有聽說過能「呼」手動存儲特效在實體框架...

+2

您可以在Entity Framework中明確調用存儲過程。 http://msdn.microsoft.com/en-us/library/bb896279.aspx – jrista 2010-02-25 04:24:04

+0

該鏈接解釋瞭如何在模型中定義存儲的特效,而不是如何實際調用它們。 – MrLane 2010-02-25 04:30:56

+0

點擊底部的鏈接。你的回答是錯誤的。 – 2010-02-25 14:03:13