简化我有一个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();
}
答案 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();
}