MVC实体关系映射:我是否需要一个单独的类(Admin)?

时间:2016-03-12 08:28:32

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

这是我的映射!

用户管理员1到0..1关系??

Admin类有2个属性:AdministratorID(Int)和AdministratorTitle(String)

一个用户可以是一种管理员状态或无管理员状态

用户到门票1到多关系??

用户可以打开多张票证,但票证只能分配给一个用户。

管理员到Ticket 1到Many关系??

管理员(具有管理员身份的用户)已分配给他修复的故障单。票证应该有一个AdminID来标识分配给它的管理员。

故障单表应包含: TicketID 管理员(管理员已分配以进行修复)和用户ID (创建故障单的人员)< / p>

User表应包含: UserID AdminID (0:不是管理员,1:Lvl 1管理员,2:Lvl 2管理员)和 TicketID (用户创建的所有故障单)

Administrator表应具有:AdminID,UserID

我的问题是,我是否需要管理员课程?我是否能够显示具有TicketID,UserID和AdminID的表格(显示同时也是管理员的用户的名称)

这是我到目前为止所做的:

User.cs

   public class User
    {
        public int UserID { get; set; }

        public int? AdministratorID { get; set; }
        [ForeignKey("AdministratorID")]
        public virtual Administrator Administrator { get; set; }

        public virtual ICollection<Ticket> Tickets { get; set; }
    }

Administrator.cs

public class Administrator
{
    public int AdministratorID { get; set; }
    public string AdministratorTitle { get; set; }


    //  public virtual ICollection<Ticket> Tickets { get; set; }

    public virtual ICollection<User> Users { get; set; }


}

}

Ticket.cs

public class Ticket
{
    public int TicketID { get; set; }

    public int UserID { get; set; }
    [ForeignKey("UserID")]
    public virtual User User { get; set; }


    public int AdministratorID { get; set; }
    [ForeignKey("AdministratorID")]
    public virtual Administrator Administrator { get; set; }
}

1 个答案:

答案 0 :(得分:2)

假设一个管理员只有一个用户,则不需要单独的Admin类或表。 User已经有一个Admin标记,因此您知道哪些用户可以并且无法分配给TicketTicket类成为:

public class Ticket
{
    public int TicketID { get; set; }

    //For Ticket to User relationship many to 1
    public int UserID { get; set; }
    public virtual User User { get; set; }

    //For Administrator to Ticket 1 to many relationship
    public int? Administrator{ get; set; }
    public virtual User Administrator { get; set; }

Ticket.AdministratorIdUser.Id之间存在FK关系,我希望Ticket.AdministratorId可以为空,以便在尚未分配给{的情况下处理这种情况{1}}。

编辑:根据OP的要求:

Ticket