我有3张桌子
用户>员工>操作员
彼此之间存在一对一的关系
public class User
{
[Key]
public int Id { get; set; }
public string Username { get; set; }
public DateTime? LoginDate { get; set; }
public bool IsActive{ get; set; }
public ICollection<Role> Roles { get; set; }
public virtual Employee Employee { get; set; }
}
public class Employee
{
[Key]
[ForeignKey("User")]
public int Id { get; set; }
public string Name{ get; set; }
public string Email { get; set; }
public int UserId { get;set; }
public virtual User User { get; set; }
public virtual Operator Operator{ get; set; }
}
public class Operator
{
[Key]
[ForeignKey("Employee")]
public int Id { get; set; }
public int EmployeeId {get;set;}
public EmployeeEmployee{ get; set; }
}
但是,当我在Sql Server MS中创建图表以检查关系时,确实会创建一对一关系。
问题是,当我尝试直接从Sql以图形方式直接插入数据时,它希望我在Employee和Operator表上插入主键。为什么他们不像用户那样自动?
答案 0 :(得分:0)
首先,您不需要指定两个变量来存储相同的信息。
public int UserId { get;set; }
public int EmployeeId {get;set;}
已存储在ID中。不需要重复。
外键不使用身份(不生成值)。因此,您需要先创建User,然后创建Employe,然后在其中设置“ User”属性与之前创建的用户。 (主要思想是您需要手动初始化对外键的引用)
User user = new User{...};
Employee employe = new Employee{User = user, ...};
context.Add(employee);
context.SaveChanges();
或者也许您将使用层次结构。(我没有在3个级别上进行检查,但在2个级别上,这是完美的选择)。
public class User
{
[Key]
public int Id { get; set; }
public string Username { get; set; }
public DateTime? LoginDate { get; set; }
public bool IsActive{ get; set; }
public ICollection<Role> Roles { get; set; }
}
public class Employee : User
{
public string Name{ get; set; }
public string Email { get; set; }
}
public class Operator : Employee
{
}