2011-12-25 61 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

このソリューションは、モデルファーストを行い、データベースからモデルを生成したくない場合に機能します。(VS2013、EF6、MVC5を使用)

EDMXファイルを開きます。 右クリックし、[データベースからモデルを更新]を押します。 のみ「ストアド・プロシージャと関数」をチェックし、「エンティティモデルにストアドプロシージャと関数を選択したインポート」を除き、下部に2つのボックスのチェックを外します(下記参照画像)

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

これが私の唯一の方法でありますモデルを更新せずにストアドプロシージャを更新することが見つかりました。