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

问题描述 投票:5回答:2

是否可以在edmx文件中永久添加手动添加的存储过程?数据库是根据模型生成的。每次我在edmx文件的编辑器中进行更改时,存储过程都会丢失。之后,仅FunctionImport条目仍然可用。

样本Function看起来像这样:

<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>
c# stored-procedures edmx
2个回答
2
投票

Moo,您不应该手工修改edmx文件。

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

这就是为什么您失去工作的原因。您应该使用与表相同的方式映射设计者已经创建的存储过程。

我假设您正在使用EF4。


0
投票

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

打开您的EDMX文件。 右键单击并从数据库中更新模型。仅选中“存储过程和功能”,然后取消选中底部的两个框,除了“将所选存储过程和函数导入实体模型”(参见下图)

“更新模型向导”“ >>

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

参考: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)

看来您必须从数据库中更新模型,才能使用“添加新的>函数导入..”向导导入存储过程。否则,它将不会显示在列表中。 如果手动添加它们,则确实存在被覆盖的风险。每次您编辑模型时都会发生这种情况。

每当您对模型或数据库进行更改时,都必须保持该代码为最新(我会保留其备份副本)。

这里是通过数据库生成模型的方法:EF Model First with Stored Procedures

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

这是我发现无需更新模型即可更新存储过程的唯一方法。

© www.soinside.com 2019 - 2024. All rights reserved.