实体框架修改模型

时间:2015-08-24 13:47:31

标签: asp.net asp.net-mvc entity-framework entity-framework-6

我正在尝试修改发送到 CreateEmployee Method 的模型实体作为要修改的参数。

public void CreateEmployee(string roleName, EmployeeModel emp)
{
    string roleName == "user";
    emp.Roles.Select(e => new RoleModel { RoleName = roleName });
    AddEmployee(emp);
}

这就是模型的样子...... enter image description here

它给我一个错误说

  

模型不包含'Select'的定义,'Select'接受类型Model的第一个参数可以找到....

我也尝试过使用'Where'方法,但仍然会出现同样的错误..

emp.Roles.Where(e => e.RoleName == roleName)

1 个答案:

答案 0 :(得分:2)

您的代码中存在一些错误,

  1. 使用=而非==进行作业
  2. 所选角色未使用
  3. Linq查询函数SelectWhere适用于IEnumerable Roles属性类型为RoleModel而不是IEnumerable<RoleModel>
  4. 所以:

    public class EmployeeModel
    {
        //some code
        public ICollection<RoleModel> Roles{ get; set; }
    }
    
    
    using System.Linq;
    
    public void CreateEmployee(string roleName, EmployeeModel emp)
    {
       string roleName = "user";
       var empRoles = emp.Roles.Select(e => new RoleModel { RoleName = roleName });
       AddEmployee(emp);
    }
    

    修改

    如果您希望每个员工最多只占一个角色,RoleEmployee之间的关系变为一对多(每个角色都有n名员工)
    如果Role对于员工是可选的:

    public class EmployeeModel
    {
        //some code
        public short? RoleId { get; set; }//nullable foreign key
        public virtual RoleModel { get; set; } //Navigation property
    }
    public class RoleModel
    {
        //some code
        public ICollection<Employee> Employees{ get; set; }
    }
    

    但是,如果Role需要Employee,则必须将外键更改为:

        public short RoleId { get; set; }//non-null foreign key
    

    要获得Employee Role,您无需在导航属性中使用SelectWhere,只需使用employee.Role即可。

    最后,对于查询Role的员工,您可以使用前面提到的SelectWhere,...