2017-08-30 11 views
0

からリストプロパティを使用してエンティティを取得しますように結合されたテーブルを返します:私はEFで生成され、適切なエンティティを持っているEF6は私のストアドプロシージャ、ストアドプロシージャ

Employee Department 
------------------- 
John  IT 
Bob  IT 
Rob  IT 
Jane  Sales 
Mary  Sales 

class Employee 
{ 
    public int Id {get;set;} 
    public string Name{get;set;} 
    public int DepartmentId{get;set;} 
    public Department Deparment{get;set;} 
} 

class Department 
{ 
    public int Id {get;set;} 
    public string Name{get;set;} 
    public ICollection<Employees> Employees{get;set;} 
} 

私のようなストアド・プロシージャを実行この:

Database.SqlQuery<Department>("exec spGetDepartments").ToList(); 

、結果は部署の一覧です。

IT 
IT 
IT 
Sales 
Sales 

それぞれには従業員の空リストがあります。

対応する従業員のリストを持つ2つの部門エンティティを持つことはできますか?

例は簡略化されていますが、LINQで複製が難しい複雑なロジックがあるため、ビジネス要件はストアドプロシージャを使用しています。

答えて

1

ストアドプロシージャのナビゲーションプロパティを使用することはできません。 ストアドプロシージャは実際にはコンテキストメソッド呼び出しを使用せず、実際のクエリの実行を行います。

必要なタスクを実行するには、DBコンテキストを使用する必要があります。 ストアドプロシージャは「合成可能」ではありません。 "レイジーローディング"またはその変形は、コンテキストを介してのみ利用可能です。

もしあなたが絶対に望むのであれば、理論的にはジェネリックリポジトリパターンでread文を実現することができます。状況によっては効率的かもしれません。

しかし、その場合、ストアドプロシージャの結果セットは、常に行セット全体を保持する必要があります。 この動作は非常に複雑です。私は実際それを助言しないだろう。それは可能かもしれないが、スマートですか?確かにそうではありません。

関連する問題