2009-10-01 19 views
6

何も戻さないエンティティ・フレームワーク内でストアド・プロシージャを使用しようとしています。ストアドプロシージャは、純粋にロギングのためのものです。エンティティ・フレームワークのストアド・プロシージャ

戻り値がいずれかのエンティティに設定されている場合にのみ機能する関数(右クリック - >追加 - >関数インポート)を追加しました。戻り値の型をInt32、Boolまたは何もない、またはエンティティ以外の値に変更すると、ビルドボタンを押すとすぐに関数(メソッド)が消えます。

私はこれをどのように分類することができますか?

答えて

7

今のところ、あなたのモデルで定義されているエンティティの1つを使用する必要があります(INTのような基本的なスカラー型も使えるはずですが)。

物事はEF4とのより良い多くを得る必要があります - 2009年後半か2010年初めでアウトにより

は、これらの新機能のいくつかの情報のためにこれらの記事を参照してください。

あなたのストアドプロシージャが純粋にロギングのためのものであれば、おそらくEntity Frameworkコンテキストとjusの外に出ますストアドプロシージャを昔ながらのADO.NETの方法で呼び出すのはなぜでしょうか?それをすべてEFコンテキストに入れるのはなぜですか?このロギングサービスを使用してデータを取得、操作、保存することはありません。静的クラスで静的メソッドにするだけです。

マルク

5

これはenitityフレームワークからストアドプロシージャを実行する1つの方法である:

  using (SEntities se = new SEntities()) 
      { 
       EntityConnection entityConnection = (EntityConnection)se.Connection; 
       DbConnection storeConnection = entityConnection.StoreConnection; 

       storeConnection.Open(); 

       DbCommand command = storeConnection.CreateCommand(); 
       command.CommandText = "NameOfStoredProcedure"; 
       command.CommandType = CommandType.StoredProcedure; 
       command.Parameters.Add(new SqlParameter("param1", value_of_param1)); 
       command.Parameters.Add(new SqlParameter("param2", value_of_param2)); 

       SqlParameter param3 = new SqlParameter(); 
       pA.SqlDbType = SqlDbType.Bit; 
       pA.ParameterName = "@param3"; 
       pA.Direction = ParameterDirection.Output; 
       command.Parameters.Add(param3); 

       command.ExecuteNonQuery(); 

       returnValue = Convert.ToBoolean(param3.Value); 
      } 
1

は、EF 4.1から、それが可能です。 Ef 4.0まで、それは不可能です。 あなたがより明確にするため、EF 4.1

res = ctx.Database.SqlQuery<MyResultType1>(...your SP call...); 

に呼び出すSPの次の行を使用することができ、参照してくださいHandle Stored Procedure in Entity Framework

関連する問題