2017-08-30 60 views
0

我的存儲過程返回連接表所示:EF6從存儲過程獲取與列表屬性實體

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

我有EF產生相應的實體:

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

您無法使用存儲過程的導航屬性。 請注意,存儲過程實際上並不使用上下文方法調用,而是實際執行查詢。

您必須使用DBcontext才能完成您所需的任務。 存儲過程不是「可組合的」。 「延遲加載」或其變體只能通過上下文獲得。

如果您絕對想要,您在理論上可以在通用存儲庫模式中實現讀取語句。在某些情況下它甚至可能是有效的。

但是在這種情況下,存儲過程中的結果集總是需要保存整個行集。 這種行爲會非常複雜。我不會建議。這可能是可能的,但聰明?決不是。