在edmx文件中手动添加存储过程

时间:2011-12-25 12:49:50

标签: c# stored-procedures edmx

是否可以在edmx文件中持久添加手动添加的存储过程?数据库是从模型生成的。每次我在edmx文件中的编辑器中更改某些内容时,存储过程都会丢失。之后只有FunctionImport条目可用。

示例函数如下所示:

    <Function Name="SP_I_InsertGroup" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="false" ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo">
      <Parameter Name="name" Type="nvarchar" Mode="In" />
      <Parameter Name="chiefId" Type="int" Mode="In" />
      <Parameter Name="description" Type="nvarchar" Mode="In" />
      <Parameter Name="parentId" Type="int" Mode="In" />
      <Parameter Name="mode" Type="char" Mode="In" />
    </Function>

相应的FunctionImportMapping:

    <FunctionImportMapping FunctionImportName="InsertGroup" FunctionName="DAL.Store.SP_I_InsertGroup" />

FunctionImport:

      <FunctionImport Name="InsertGroup" ReturnType="Collection(Int32)">
        <Parameter Name="name" Mode="In" Type="String" />
        <Parameter Name="chiefId" Mode="In" Type="Int32" />
        <Parameter Name="description" Mode="In" Type="String" />
        <Parameter Name="parentId" Mode="In" Type="Int32" />
        <Parameter Name="mode" Mode="In" Type="String" />
      </FunctionImport>

2 个答案:

答案 0 :(得分:2)

Moo,你不应该手动修改edmx文件。

“对此文件的更改可能会导致错误的行为,并且如果重新生成代码,则会丢失。”

这就是你失去工作的原因。您应该从设计器映射已创建的存储过程,就像使用表格一样。

我假设你在玩EF4。

答案 1 :(得分:0)

如果您使用Model First并且不想从数据库生成模型,则此解决方案有效。(使用VS2013,EF6,MVC5)

打开您的EDMX文件。 右键单击并按数据库中的更新模型。 只检查“存储过程和功能”并取消选中底部的两个框,“将选定的存储过程和功能导入实体模型”(见下图)

Update Model Wizard

注意:如果您有数据注释等,它们将被重新生成并被覆盖。

参考:Using stored procedures in Entity Framework Model First Approach (Part I - Adding New Stored procedure)


进一步说明和细节:

“当实体数据模型向导从数据库生成.edmx文件时,它会在存储模型中为数据库中的每个存储过程创建条目。在创建函数导入时,相应的条目将添加到概念模型中。” How to: Import a Stored Procedure (Entity Data Model Tools)

您似乎必须从数据库更新模型才能使用“添加新的&gt;函数导入..”向导导入存储过程。否则,它不会出现在列表中。 如果您手动添加它们,则会冒被覆盖的风险。每次编辑模型时都会发生这种情况。您必须在对模型或数据库进行更改时随时更新代码(我会保留备份副本)。

以下是通过从数据库生成模型来实现的:EF Model First with Stored Procedures

他们还会参考此MSDN社区支持论坛中的数据库更新模型:how to add new stored procedure to existing .edmx file

这是我发现更新存储过程而不更新模型的唯一方法。

相关问题