实体框架添加到数据库,我决定外键ID

时间:2014-11-25 12:30:54

标签: c# entity-framework-5

简化我有一个Employee类和一个Role类,如下所示:

public class Employee
{
    public int ID { get; set; }
    [ForeignKey("Role")]
    public int RoleID { get; set; }
    public virtual Role Role { get; set; }
    [StringLength(20)]
    public string Name{ get; set; }
}

public class Role
{
    public int ID { get; set; }
    [Required]
    [StringLength(20)]
    public string Name { get; set; }
}

现在出现了问题。

假设我知道角色中的ID 3是“经理”。

我想用RoleID = 3将新员工添加到数据库中,因此他将成为一名经理。

当我将员工添加到数据库时,就像实体框架只是跳过阅读RoleID

它不是引用ID 3的现有角色,而是在数据库中使用名称,经理和ID 4创建一个新角色。

我不确定自己是否足够清楚,但我希望你们中的一些聪明人可以帮助我

完整代码

第一部分是SetUp类中的一些方法

        var db = new EmployeeRepository(new DataBaseContext());

        var role = new DBEntities.Role { Name = "Employee" };
        var employee = new DBEntities.Employee
        {
            Name = "Adam"
            Role = role
        };
        db.Create(employee);

EmployeeRepository:

         private readonly DataBaseContext _context;

         public EmployeeRepository(DataBaseContext context)
    {
        _context = context;
    }

         public void Create(Employee employee)
    {
        var roleId = from r in _context.Roles
            where r.Name == employee.Role.Name
            select r.ID; 
        employee.RoleID = roleId.First();
        employee.Role.ID = roleId.First();

        _context.Employees.Add(employee);
        _context.SaveChanges();
    }

1 个答案:

答案 0 :(得分:0)

您应该使用:

private readonly DataBaseContext _context;

     public EmployeeRepository(DataBaseContext context)
{
    _context = context;
}

     public void Create(Employee employee)
{
    var roles = from r in _context.Roles
        where r.Name == employee.Role.Name
        select r; 
    employee.Role = roles.First();

    _context.Employees.Add(employee);
    _context.SaveChanges();
}

或者,您可以设置employee.RoleId而不设置Employee.Role:

public void Create(Employee employee)
{
    var roleIds = from r in _context.Roles
        where r.Name == employee.Role.Name
        select r.ID; 
    employee.RoleId = roleIds.First();
    employee.Role = null;

    _context.Employees.Add(employee);
    _context.SaveChanges();
}