0

我有一个实体模型文件(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" />

我将不胜感激任何帮助。

谢谢。

4

3 回答 3

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。

于 2010-02-25T04:30:18.013 回答
0

我遇到了这个问题,发现我错过了这里描述的“功能导入”步骤: http ://weblogs.asp.net/dotnetstories/archive/2011/03/01/using-stored-procedures-with-entity -framework-in-an-asp-net-application.aspx

简而言之:

  1. 打开您的 .edmx 设计器
  2. 右键单击并从菜单中选择添加->“功能导入”。
  3. 从下拉列表中选择您的存储过程。
  4. 添加名称。
  5. 单击确定。
于 2012-08-22T12:56:43.833 回答
-2

我的印象是你不能调用存储过程......实体框架为你调用它们......基本上存储过程是实时 SQL 生成的可选替代品,实体框架根据需要调用它们。

我还没有听说能够在实体框架中手动“调用”存储的过程......

于 2010-02-25T04:11:28.230 回答