我正在尝试修改发送到 CreateEmployee Method 的模型实体作为要修改的参数。
public void CreateEmployee(string roleName, EmployeeModel emp)
{
string roleName == "user";
emp.Roles.Select(e => new RoleModel { RoleName = roleName });
AddEmployee(emp);
}
它给我一个错误说
模型不包含'Select'的定义,'Select'接受类型Model的第一个参数可以找到....
我也尝试过使用'Where'方法,但仍然会出现同样的错误..
emp.Roles.Where(e => e.RoleName == roleName)
答案 0 :(得分:2)
您的代码中存在一些错误,
=
而非==
进行作业Select
和Where
适用于IEnumerable
Roles
属性类型为RoleModel
而不是IEnumerable<RoleModel>
所以:
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);
}
修改强>
如果您希望每个员工最多只占一个角色,Role
和Employee
之间的关系变为一对多(每个角色都有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
,您无需在导航属性中使用Select
或Where
,只需使用employee.Role
即可。
最后,对于查询Role
的员工,您可以使用前面提到的Select
,Where
,...