2010-02-25 19 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