2012-04-09 11 views
0

パラメータに基づいて異なる結果セットを実行しているときに問題があります。 私は、両方のクエリは、例えば一度だけ実行されるパラメータに基づいて2つのクエリをexecし、SPを持っている:エンティティ・フレームワーク4.1のストアド・プロシージャの動的SQL

CREATE PROCEDURE [dbo].[ShowMessages]   
    @context int, 
AS 
     BEGIN 
     --CALENDAR ADMIN QUEUE 
     if @context = 1 
      BEGIN 
      Select CustomerName, CustomerAddress from Customer 
      END 
     ELSE if @queueContext = 2 OR @queueContext = 6 
      BEGIN 
      Select EmployeeName, EmployeeAddress from Employee 
      END 
END 

=== 私は私の複合型とそれをマッピングされた:EFは、二つのフィールドCustomerNameCustomerAddressで複合型を生成し、 。 EFはIDataReaderのエラーをスローします。しかし、このエラーはまれに私が最初のクエリで呼び出されても発生します。

どうすればこの機能を実現できますか?

答えて

1

SPから返されるテーブルの列名は、「コンテキスト」によって異なるため、EFはこれらのコンテキストのいずれかのエンティティプロパティにのみマップすることができます。同じストアドプロシージャから異なる列名を返すのは悪い習慣です。したがって、すべてのコンテキスト/シナリオで一貫性を持たせることが必要です。

あなたはとても好きなようにキーワードを使用してこれを行うことができますあなたの迅速な対応のための

SELECT CustomerName AS Name, CustomerAddress AS Address FROM Customer 

そして

SELECT EmployeeName AS Name, EmployeeAddress AS Address FROM Employee 
+0

おかげで、私の場合には、建築の義務は、任意の固体は、そこにあるあります可能ではないという証拠? –

+0

このエラーはほとんど発生しません。 i @context = 1の場合は常に。 –

+1

必要な証拠はありません。 EFは、設計時に結果セットの列名を複合型のプロパティ名にマップし、単一のマッピング・セットのみが可能です。したがって、第1または第2のクエリをマッピングすることはできますが、両方をマッピングすることはできません。クエリの列に同じ名前を使用するか、2つの異なるSPを使用し、コンテキスト値に基づいてそれらを呼び出す。 –

関連する問題