谁可以告诉您在这种情况下如何制作模型。较早的一名雇员(到今天为止,有解雇的日期)可以担任多个职位,但现在他们只能担任一个职位(没有解雇的日期)。
public class Employee
{
[Key]
public int EmployeeId { get; set; }
public Position Position { get; set; }
public DateTime DateStart { get; set; }
public DateTime DateQuit { get; set; }
}
public class Position
{
[Key]
public int PositionId { get; set; }
}
我是否需要将位置下一个代码添加到类中?
public Employee Employee { get; set; }
我是否需要将下一个代码添加到Employee类?
public int PositionId { get; set; }
并且有必要使方法OnModelCreating吗?
protected override void OnModelCreating(Modelbuilder modelBuilder)
{
modelBuilder.Entity<Company>()
.HasMany(c => c.Employees)
.WithOne(e => e.Position);
}
答案 0 :(得分:1)
首先,它应该是public ICollection<Employee> Employees { get; set; }
。
第二,它是可选的。如果您想知道某个职位的员工是谁,则可以添加它。
是的。这是定义两个实体之间关系的外键。
是的,因为然后在EntityFramework中适当地配置了模型。
如果要在职位实体中包含员工列表,则应为:
modelBuilder.Entity<Position>()
.HasMany<Employee>(g => g.Employees)
.WithRequired(s => s.Position)
.HasForeignKey<int>(s => s.PositionId);
或
modelBuilder.Entity<Employee>()
.HasRequired<Position>(s => s.Position)
.WithMany(g => g.Employees)
.WithForeignKey<int>(s => s.PositionId);
如果您不需要职位实体中的员工列表,则应为:
modelBuilder.Entity<Employee>()
.HasRequired<Position>(s => s.Position)
.WithMany()
.WithForeignKey<int>(s => s.PositionId);
答案 1 :(得分:0)
在Employee中添加职位表的外键
public class Employee
{
[Key]
public int EmployeeId { get; set; }
public Position Position { get; set; }
public DateTime DateStart { get; set; }
public DateTime DateQuit { get; set; }
public int PositionId { get; set; }
public virtual Position Position { get; set;}
}
然后在职位表中添加员工的集合
public class Position
{
[Key]
public int PositionId { get; set; }
public virtual ICollection<Employee> Employees { get; set; }
}
答案 2 :(得分:0)
正如您所说,您期望一位雇员有一个职位,但一个职位一次可以有多名员工。简而言之,它的one-to-many
在Position
和Employee
之间。
因此您可以执行以下操作:
public class Employee
{
[Key]
public int EmployeeId { get; set; }
public int PositionId { get; set; }
public DateTime DateStart { get; set; }
public DateTime DateQuit { get; set; }
public Position Position { get; set; }
}
public class Position
{
[Key]
public int PositionId { get; set; }
}
然后在OnModelCreating
中输入
protected override void OnModelCreating(Modelbuilder modelBuilder)
{
modelBuilder.Entity<Employee>()
.HasOne(e => e.Position)
.WithMany()
.HasForeignKey(e => e.PositionId);
}
要了解有关EF核心关系的更多信息:EF Core Relationships