2011-12-25 54 views
4

是否可以在edmx文件中持久添加手動添加的存儲過程?數據庫是從模型生成的。每次我在edmx文件的編輯器中更改某些內容時,存儲過程都會丟失。之後只有FunctionImport條目仍然可用。在edmx文件中手動添加存儲過程

一個示例函數如下:

<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> 

回答

1

哞,你不應該手動修改的EDMX文件。

「對此文件所做的更改可能會導致不正確的行爲,並且如果重新生成代碼將會丟失。」

這就是爲什麼你失去了你的工作。您應該從設計器映射已經創建的存儲過程,就像您對錶格所做的一樣。

我假設你正在玩EF4。

+0

你提出的或多或少是個問題。我的意思是我遵循了Microsoft在http://msdn.microsoft.com/en-us/library/dd296754.aspx上描述的步驟。這導致了所描述的問題。 – niklr

+0

就像@Fergara所說的,當你使用設計器編輯EDMX文件時,它會重新生成它下面的所有文件。這就是你失去這些文件的原因。每次您編輯它們時,都必須重新替換這些文件。有關更多信息,請參閱下面的答案。 – Termato

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)

看起來您必須從數據庫更新您的模型才能使用「添加新的>函數導入..」嚮導來導入存儲過程。否則,它不會出現在列表中。 如果您手動添加它們,您確實有被覆蓋的風險。每次編輯模型時都會發生這種情況。只要您對模型或數據庫進行了更改(我會保留備份副本),您就必須保持該代碼始終保持最新狀態。

這裏是你如何從數據庫生成模型做:EF Model First with Stored Procedures

他們還引用更新從數據庫模型在這個MSDN社區支持論壇:how to add new stored procedure to existing .edmx file

這是我唯一的出路我們發現無需更新模型即可更新存儲過程。