ASP.NET MVC实体设计,Staff实体怎么会越来越臃肿!!!???

libinlink 2014-11-10 03:17:57
员工实体Staff越来越臃肿啊!!!!!
我非要这样写吗???????


Eval2Dept 、 Eval2Team、Satisfaction。。。。。都要关联 Staff
目前我这样写没有问题,可是长此以往,国将不国啊!!!!!!
我快疯了





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; }

}

...全文
205 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
winnowc 2014-11-10
  • 打赏
  • 举报
回复
Staff后面添加的那些反向关联属性,它们不是必须的,不加也可以,为什么非要加呢
  • 打赏
  • 举报
回复
看起来,你的 Staff 只应该包括“用户名、姓名、工号”三项。 然后你的 Dept,只应该包括车间(2、3个)属性的信息。 然后一个 Team,只包括(1、2个)属性信息。 然后一个“考核记录”,它关联到 Team、Staff(考核人和被考核人都是Staff)、日期、评定等5、6个属性。这是属性最多的,但是也不应该冗余。 去掉结构设计中冗余是分析设计的目的。如果带着冗余,就别开始写程序。
  • 打赏
  • 举报
回复
现有基本的 Staff,后有的 Password。大部分对外提供的 Staff 信息都不能给暴露 Password 信息,所以 Password 根本不是 Staff 中的属性。你可以另外定义一个类,例如
public class SecretInformation
{
    public Staff User;
    public string Password;
    .....
}
当然这里的 SecretInformation 是继承自 Staff 还是 组合它,那是你自己的选择问题。可能需要考虑更多的设计问题才能最终决定。 其它的“多余关系”也是一样。你用各种后来出现的关系类型去破坏基础类 Staff,这是不对的。后来出现的东西(什么Department等等),就是后来的,它改变不了 Staff,一个Staff根本不可能关心这些后来出现的东西。 基本上,你碰到了一个“滥用关联方向”的问题。实际上只有在“缓冲”中才需要保存反向关联,而对象(类)的设计中几乎不会有循环依赖的关联
libinlink 2014-11-10
  • 打赏
  • 举报
回复
引用 8 楼 insus 的回复:
[quote=引用 7 楼 libinlink 的回复:] [quote=引用 4 楼 insus 的回复:] 参考相关: http://www.cnblogs.com/insus/p/3384472.html
能告诉我现在该怎么改吗?[/quote] 现有的先不理会,如有新Entity的,可以新建Entity。当有时间做优化时,再搬至新建的Entity中去。[/quote] 大神啊,请明示啊 您能拿我发的代码,举个例子吗? 我要是再增加一个新的类,怎么写,怎么减少这种无谓的代码
insus 2014-11-10
  • 打赏
  • 举报
回复
引用 7 楼 libinlink 的回复:
[quote=引用 4 楼 insus 的回复:] 参考相关: http://www.cnblogs.com/insus/p/3384472.html
能告诉我现在该怎么改吗?[/quote] 现有的先不理会,如有新Entity的,可以新建Entity。当有时间做优化时,再搬至新建的Entity中去。
libinlink 2014-11-10
  • 打赏
  • 举报
回复
引用 4 楼 insus 的回复:
参考相关: http://www.cnblogs.com/insus/p/3384472.html
能告诉我现在该怎么改吗?
xdashewan 2014-11-10
  • 打赏
  • 举报
回复
非大神,大家一起探讨下吧。我也曾经遇到过同样的难题,画面需求各种关联数据,我个人觉得这是设计上问题。首先一个页面一次请求返回的内容过多,或许有些是不需要的内容,或许有些内容不需要一次全部检索出来,可以异步加载或者分散在别页面加载。比如你原来可能一个页面显示n个表格数据,你可以异步请求数据,来加载数据。也可以把页面布局改了,使得页面1只显示部分主要数据,然后通过链接导向子页面显示详细。
insus 2014-11-10
  • 打赏
  • 举报
回复
2#帖出的,应该放在Entity类中去。
insus 2014-11-10
  • 打赏
  • 举报
回复
libinlink 2014-11-10
  • 打赏
  • 举报
回复
还有下面这些,也是我要重复的,疯了,大神啊, 来拯救 我吧!!!!!!!!!!!!!!!!!!!!!

 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);

        }
libinlink 2014-11-10
  • 打赏
  • 举报
回复
问题就出在 [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; }

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧