多个导航与相同的表多对多的关系实体framwwork

时间:2016-03-13 10:57:10

标签: c# asp.net .net asp.net-mvc entity-framework

我刚开始使用EF代码,所以我在本主题中是初学者。

我致力于任务管理系统。我正在处理任务和员工之间的多对多关系。有三种关系

  1. 任务 - 员工(此处员工是负责该任务的人员)
  2. 任务 - 员工(此处员工是任务完成后将收到通知的人员)
  3. 任务 - 员工(此处员工是批准任务的人员)
  4. 对于每个这样的多对多关系,我有三个表。 到目前为止,我已尝试过这种方法,我收集的所有记录都是负责人而非相关记录。对方法的任何建议?我做错了什么?

    代码I用于获取数据

    var tasks = db1.Tasks.Include(t => t.TaskPriority).Include(t=>t.Responsible).Where(t => t.tas_status.Equals(AppGlobals.PENDING) || t.tas_status.Equals(AppGlobals.WAITING));
    

    _

    [Table("Task")]
    public class Task
    {
        public Task()
        {
            this.Responsible = new HashSet<Employee>();
            this.Notified = new HashSet<Employee>();
            this.Approved = new HashSet<Employee>();
        }
    
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int tas_id { get; set; }
        public string tas_name {get; set;}
        public virtual ICollection<Employee> Responsible { get; set; }
        public virtual ICollection<Employee> Notified { get; set; }
        public virtual ICollection<Employee> Approved { get; set; }
    
    }
    
    [Table("Employee")]
    public class Employee
    {
        [Key]
        [Display(Name = "Employee ID")]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int emp_id { get; set; }
        [Required]
        [Display(Name = "Employee Name")]
        public string emp_name { get; set; }
    
        public virtual ICollection<Task> Assigned { get; set; }
        public virtual ICollection<Task> Notified { get; set; }
        public virtual ICollection<Task> Approved { get; set; }
    }
    
    [Table("TaskResponsible")]
    public class TaskResponsible
    {
        [Required]
        [Display(Name = "Task")]
        [Key, Column(Order = 0)]
        public int tas_id { get; set; }
    
        [Required]
        [Display(Name = "Person Responsible")]
        [Key, Column("emp_id", Order = 1)]
        public int emp_id { get; set; }
    
        public virtual Task Task { get; set; }
        public virtual Employee Responsible { get; set; }
    
    }
    
    [Table("TaskApproval")]
    public class TaskApproval
    {
        [Required]
        [Display(Name = "Task")]
        [Key, Column(Order = 0)]
        public int tas_id { get; set; }
    
        [Required]
        [Display(Name = "Person Approved")]
        [Key, Column(Order = 1)]
        public int emp_id { get; set; }
    
        public virtual Task Task { get; set; }
        public virtual Employee Approved { get; set; }
    }
    
    
    [Table("TaskNotified")]
    public class TaskNotified
    {
        [Required]
        [Display(Name = "Task")]
        [Key, Column(Order = 0)]
        public int tas_id { get; set; }
    
        [Required]
        [Display(Name = "Person Notified")]
        [Key, Column("emp_id", Order = 1)]
        public int emp_id { get; set; }
    
        public virtual Task Task { get; set; }
        public virtual Employee Notified { get; set; }
    }
    
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Task>()
                .HasMany(a => a.Responsible)
                .WithMany(d => d.Tasks)
                .Map(m =>
                {
                    m.MapLeftKey("tas_id");
                    m.MapRightKey("emp_id");
                    m.ToTable("TaskResponsible");
                });
            modelBuilder.Entity<Task>()
                .HasMany(a => a.Notified)
                .WithMany(d => d.Tasks)
                .Map(m =>
                {
                    m.MapLeftKey("tas_id");
                    m.MapRightKey("emp_id");
                    m.ToTable("TaskNotified");
                });
            modelBuilder.Entity<Task>()
                .HasMany(a => a.Approved)
                .WithMany(d => d.Tasks)
                .Map(m =>
                {
                    m.MapLeftKey("tas_id");
                    m.MapRightKey("emp_id");
                    m.ToTable("TaskApproval");
                });
            base.OnModelCreating(modelBuilder);
        }
    

0 个答案:

没有答案
相关问题