Linq 使用存储过程作为edmx文件中的函数
我有一个实体模型文件(edmx)文件,它包含很少的表和存储过程 如何调用映射到函数的存储过程?我认为它应该很简单,我确实在edmx文件中看到了映射,但我不知道如何在代码中使用它 以下是一个映射示例:Linq 使用存储过程作为edmx文件中的函数,linq,linq-to-entities,edmx,Linq,Linq To Entities,Edmx,我有一个实体模型文件(edmx)文件,它包含很少的表和存储过程 如何调用映射到函数的存储过程?我认为它应该很简单,我确实在edmx文件中看到了映射,但我不知道如何在代码中使用它 以下是一个映射示例: <Function Name="pa_crud_broker_ADD" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="false" ParameterTypeSemantics="A
<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" />
我将感谢任何帮助
谢谢。我的印象是,您不能调用存储过程……实体框架为您调用它们……基本上,存储过程是实时SQL生成的可选替代品,实体框架会根据需要调用它们
我还没有听说过能够在实体框架中手动“调用”存储的过程…我有点生疏,但是您应该能够通过以下两种方式之一调用您的函数。如果您是从模型生成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", ...);
var objectContext=newobjectcontext(…);
var result=objectContext.ExecuteFunction(“pa_crud_broker_ADD”,…);
我不能完全肯定第二个案例的返回结果。我不确定EFV1是否支持这种转换。我知道EF v4在这方面增加了一些相当大的改进,因此如果EF v1不支持它,我会研究EF v4。我遇到了这个问题,发现我缺少此处描述的“函数导入”步骤: 简言之:
您完全可以从实体框架中调用存储过程。该链接解释了如何在模型中定义存储过程,而不是如何实际调用它们。我还注意到,如果我将函数(即映射的存储过程)返回实体模块中的实体,我会看到它。但是如果它返回一个前置类型,它就不会显示。例如,如何运行返回int的存储过程?