繁体   English   中英

EF6从存储过程中获取具有列表属性的实体

[英]EF6 Get entity with list property from stored procedure

我的存储过程返回一个联接表,如下所示:

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

每个人都有空的员工列表。

我可以让两个部门实体具有相应的雇员列表吗?

该示例已简化,但是业务需求是使用存储过程,因为存在复杂的逻辑,很难在LINQ中复制。

您不能在存储过程中使用导航属性。 请注意,存储过程实际上并不使用上下文方法调用,而是实际的查询执行。

您必须使用DBcontext来完成所需的任务。 存储过程不是“可组合的”。 “延迟加载”或其变体仅可通过上下文使用。

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

但是在这种情况下,存储过程中的结果集将始终必须保留整个行集。 行为将非常复杂。 我实际上不会建议。 可能,但是聪明吗? 绝对不会。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM