是否可以在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>
答案 0 :(得分:2)
Moo,你不应该手动修改edmx文件。
“对此文件的更改可能会导致错误的行为,并且如果重新生成代码,则会丢失。”
这就是你失去工作的原因。您应该从设计器映射已创建的存储过程,就像使用表格一样。
我假设你在玩EF4。
答案 1 :(得分:0)
如果您使用Model First并且不想从数据库生成模型,则此解决方案有效。(使用VS2013,EF6,MVC5)
打开您的EDMX文件。 右键单击并按数据库中的更新模型。 只检查“存储过程和功能”并取消选中底部的两个框,“将选定的存储过程和功能导入实体模型”(见下图)
注意:如果您有数据注释等,它们将被重新生成并被覆盖。
进一步说明和细节:
“当实体数据模型向导从数据库生成.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
这是我发现更新存储过程而不更新模型的唯一方法。