2017-08-30 36 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才能完成您所需的任务。 存储过程不是“可组合的”。 “延迟加载”或其变体只能通过上下文获得。

如果您绝对想要,您在理论上可以在通用存储库模式中实现读取语句。在某些情况下它甚至可能是有效的。

但是在这种情况下,存储过程中的结果集总是需要保存整个行集。 这种行为会非常复杂。我不会建议。这可能是可能的,但聪明?决不是。

相关问题