2014-01-29 39 views
0

附加表的数据我有以下三个表如何从使用EF/LINQ

Employee(empid, name) 
Role(roleid, name) 
EmpRoleMap(mapid, empid,roleid) 

在索引视图我告诉员工与每个员工编辑链接的链接。当用户点击编辑时,它会打开选​​定员工的编辑筛选器。

对于此页面呈现我正在对数据库进行两次调用。首先是获取有关选定员工的详细信息。其次是查询EmpRoleMap表以找出员工所属的所有角色。

我想在单个数据库调用中做同样的事情,即单个调用会给我关于员工和来自EmpRoleMap & RoleName列表的雇员的详细信息。

我在脚手架上使用Code First方法。

我该如何使用EntityFramework来做到这一点?我们可以使用LINQ的“包含”子句从其他表(这里是EmpRoleMap,Role)获取其他数据。

+0

阻止您在单个EDM中添加所有3个表格?点击此处查看此链接。它可能会帮助你。 http://www.dotnetcurry.com/showarticle.aspx?ID=600 – samar

+0

如果你的模型具有适当的导航属性,你可以使用'Include'(类似于'公共虚拟IList 角色{get; set;}例如,在Employee类中)。如果没有,则必须使用连接进行查询。顺便说一句,在代码优先的情况下,你不应该有一个'EmpRoleMap'实体,因为它只是一个关系数据表(没有更多的信息)。 –

回答

0

你必须做一个好的实体模型设计。我会试着向你展示我在说什么,但请记住,在这一刻我无法检查代码。

public class EmployeeModel 
    { 
     [Key] 
     [ForeignKey("EmployeeRoles")] 

     public decimal empid { get; set; } 

     public string name { get; set; } 

     public virtual List<EmpRoleModel> EmployeeRoles { get; set; } 
    } 

    public class RoleModel 
    { 
     [Key] 
     public decimal roleid { get; set; } 

     public string name { get; set; } 
    } 

    public class EmpRoleModel 
    { 
     [Key] 
     [Column(Order = 0)] 
     [ForeignKey("Employee")] 

     public decimal empid { get; set; } 

     [Key] 
     [Column(Order = 1)] 
     [ForeignKey("Role")] 

     public decimal roleid { get; set; } 

     public virtual EmployeeModel Employee { get; set; } 
     public virtual RoleModel  Role  { get; set; } 
    } 

现在您可以通过EmployeeRoles属性导航到员工角色。

请尝试此代码并给我反馈。