62,046
社区成员
发帖
与我相关
我的任务
分享
public class Staff
{
public int Id { get; set; }
/// <summary>
/// 用户名
/// </summary>
[Required]
[Display(Name = "用户名")]
[MaxLength(10)]
public string LoginName { get; set; }
/// <summary>
/// 用户名
/// </summary>
[Required]
[Display(Name = "密码")]
public string LoginPwd { get; set; }
/// <summary>
/// 姓名
/// </summary>
[Required]
[Display(Name = "姓名")]
[MaxLength(10)]
public string Name { get; set; }
/// <summary>
/// 职务
/// </summary>
[Display(Name = "职务")]
[MaxLength(20)]
public string Duty { get; set; }
/// <summary>
/// 工号
/// </summary>
[Display(Name = "工号")]
[MaxLength(20)]
public string StaffNo { get; set; }
[Display(Name = "主管")]
public bool IsAdmin { get; set; }
public int DepartmentId { get; set; }
public virtual Department Department { get; set; }
[InverseProperty("Leader")]
public virtual List<Eval2Team> leaders { get; set; }
[InverseProperty("Staff")]
public virtual List<Eval2Team> staffs { get; set; }
[InverseProperty("Supervisor")]
public virtual List<Eval2Dept> supervisors { get; set; }
[InverseProperty("DeptManager")]
public virtual List<Eval2Dept> deptmanagers { get; set; }
[InverseProperty("Staff_Sat")]
public virtual List<Satisfaction> staffs_sat { get; set; }
[InverseProperty("Leader_Sat")]
public virtual List<Satisfaction> leaders_sat { get; set; }
}
public class Eval2Dept
{
public int Id { get; set; }
/// <summary>
/// 主管科室领导
/// </summary>
[Required]
[Display(Name = "主管科室领导")]
public int SupervisorId { get; set; }
/// <summary>
/// 车间领导
/// </summary>
[Required]
[Display(Name = "车间领导")]
public int DeptManagerId { get; set; }
/// <summary>
/// 考核日期
/// </summary>
[Display(Name = "考核日期")]
public DateTime Date { get; set; }
[ForeignKey("DeptManagerId")]
public virtual Staff DeptManager { get; set; }
[ForeignKey("SupervisorId")]
public virtual Staff Supervisor { get; set; }
public virtual List<Eval2DeptDetail> Rules { get; set; }
}
public class Eval2Team
{
public int Id { get; set; }
/// <summary>
/// 领导
/// </summary>
[Required]
[Display(Name = "考核人")]
public int LeaderId { get; set; }
/// <summary>
/// 员工
/// </summary>
[Required]
[Display(Name = "被考核人")]
public int StaffId { get; set; }
/// <summary>
/// 考核日期
/// </summary>
[Display(Name = "考核日期")]
public DateTime Date { get; set; }
[ForeignKey("LeaderId")]
public virtual Staff Leader { get; set; }
[ForeignKey("StaffId")]
public virtual Staff Staff { get; set; }
public virtual List<Eval2TeamDetail> Rules { get; set; }
}
public class Satisfaction
{
public int Id { get; set; }
[Display(Name = "姓名")]
public int StaffId { get; set; }
[Display(Name = "领导")]
public int LeaderId { get; set; }
/// <summary>
/// 外出事由
/// </summary>
[Display(Name = "评定格次")]
[Range(0.0, 1.0)]
public float Rating { get; set; }
/// <summary>
/// 评定日期
/// </summary>
[Display(Name = "评定日期")]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime LogDate { get; set; }
[ForeignKey("StaffId")]
public virtual Staff Staff_Sat { get; set; }
[ForeignKey("LeaderId")]
public virtual Staff Leader_Sat { get; set; }
}
public class SecretInformation
{
public Staff User;
public string Password;
.....
}
当然这里的 SecretInformation 是继承自 Staff 还是 组合它,那是你自己的选择问题。可能需要考虑更多的设计问题才能最终决定。
其它的“多余关系”也是一样。你用各种后来出现的关系类型去破坏基础类 Staff,这是不对的。后来出现的东西(什么Department等等),就是后来的,它改变不了 Staff,一个Staff根本不可能关心这些后来出现的东西。
基本上,你碰到了一个“滥用关联方向”的问题。实际上只有在“缓冲”中才需要保存反向关联,而对象(类)的设计中几乎不会有循环依赖的关联。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//将 FOREIGN KEY 约束 'FK_dbo.Eval2Team_dbo.Staffs_StaffId' 引入表 'Eval2Team'
//可能会导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。
modelBuilder.Entity<Satisfaction>()
.HasRequired(e => e.Leader_Sat)
.WithMany(e => e.leaders_sat)
.WillCascadeOnDelete(false);
modelBuilder.Entity<Satisfaction>()
.HasRequired(e => e.Staff_Sat)
.WithMany(e => e.staffs_sat)
.WillCascadeOnDelete(false);
modelBuilder.Entity<Eval2Team>()
.HasRequired(e => e.Leader)
.WithMany(e => e.leaders)
.WillCascadeOnDelete(false);
modelBuilder.Entity<Eval2Team>()
.HasRequired(e => e.Staff)
.WithMany(e => e.staffs)
.WillCascadeOnDelete(false);
modelBuilder.Entity<Eval2Dept>()
.HasRequired(e => e.Supervisor)
.WithMany(e => e.supervisors)
.WillCascadeOnDelete(false);
modelBuilder.Entity<Eval2Dept>()
.HasRequired(e => e.DeptManager)
.WithMany(e => e.deptmanagers)
.WillCascadeOnDelete(false);
}