【问题标题】:Entity Framework modify models实体框架修改模型
【发布时间】:2015-08-24 13:47:30
【问题描述】:

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

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

这就是模型的样子......

它给了我一个错误提示

模型不包含“选择”的定义,并且可以找到接受模型类型的第一个参数的“选择”....

我也尝试过使用“Where”方法,但仍然报同样的错误..

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

【问题讨论】:

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


    【解决方案1】:

    您的代码中有一些错误,

    1. 使用= 而不是== 进行分配
    2. 所选角色未使用
    3. SelectWhere 等 Linq 查询函数适用于 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);
    }
    

    编辑:

    如果您希望每个员工最多拥有一个角色,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; }
    }
    

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

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

    要获得EmployeeRole,您不需要在导航属性上使用SelectWhere,只需使用employee.Role

    最后查询Role的员工可以使用SelectWhere,...如前所述。

    【讨论】:

    • 感谢您的帮助....当我将 RoleModel 更改为 ICollection 时,模型错误消失了...但无论如何我可以使用 RoleModel 而不是 Icollection?...因为我只需要在这里插入一个角色值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 2013-06-05
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多