【问题标题】:using stored procedures as functions from edmx file使用存储过程作为 edmx 文件中的函数
【发布时间】:2010-02-25 04:05:59
【问题描述】:

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

我将不胜感激。

谢谢。

【问题讨论】:

  • 我还注意到,如果我的函数(即映射的存储过程)返回实体模块中的实体,我确实看到了。但如果它返回一个 premitive type ,它就不会出现。那么我怎样才能运行一个返回 int 的存储过程呢?

标签: linq linq-to-entities edmx


【解决方案1】:

我有点生疏了,但是您应该能够以两种方式之一调用您的函数。如果您从模型生成 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】:

    我遇到了这个问题,发现我缺少此处描述的“功能导入”步骤: 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. 点击确定。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-06
      • 2021-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多