INSERT语句与FOREIGN KEY

时间:2016-03-08 18:44:20

标签: c# sql entity-framework

我正在使用MVC实体框架5制作票务系统。

我的类如何映射:

用户到管理员是1到0..1(我可以为一些用户分配管理员状态,但我不希望每个用户都拥有它)

管理员到故障单是1到1(您只能将1个管理员(以解决问题)分配给故障单)

用户到故障单是1到多(一个用户可以创建多个故障单)

我遇到这个问题,如果我创建一个没有adminID的用户的票证(查看here)它会给我以下错误:

  

INSERT语句与FOREIGN KEY约束冲突   “FK_dbo.Ticket_dbo.Administrator_UserID”。冲突发生在   数据库“RecreationalServicesTicketingSystem.DAL.IssueContext”,表   “dbo.Administrator”,列'UserID'。声明一直如此   终止。

我认为问题在于“管理员与门票”之间的映射。 1对1关系强制条件,如果我创建票证,用户必须具有“adminID”或数据库中存在冲突。

我的问题是,Admin to Tickets应该采用什么映射来解决此问题? 也许1到0 .. *(1比1或更多)会解决这个问题吗?

管理员

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

    [Key]
    *public int AdminID { get; set; }
    public virtual ICollection<Ticket> Tickets { get; set; }* 
}

Ticket.cs

public enum Priority
{
    Low, Med, High
}

public class Ticket
{
    public int TicketID { get; set; }
    public string Issue { get; set; }
    [DisplayFormat(NullDisplayText = "No Priority")]
    public Priority? Priority { get; set; }
    [ForeignKey("CategoryID")]
    public virtual Category Category { get; set; }
    public int CategoryID { get; set; }
    [ForeignKey("UserID")]
    public virtual User User { get; set; }
    public int UserID { get; set; }


    *public int AdminID { get; set; }*
}

应用安迪的解决方案,我让管理员签订了1:多种关系 (在Ticket.cs中添加了public virtual Administrator Administrator { get; set; }

Error LOOK HERE

  

INSERT语句与FOREIGN KEY约束冲突   “FK_dbo.Ticket_dbo.Administrator_UserID”。冲突发生在   数据库“RecreationalServicesTicketingSystem.DAL.IssueContext”,表   “dbo.Administrator”,列'UserID'。声明一直如此   终止。

管理员

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

    [Key]
    *public int AdminID { get; set; }
    public virtual ICollection<Ticket> Tickets { get; set; }* 
}

public class Ticket
{
    public int TicketID { get; set; }
    public string Issue { get; set; }
    [DisplayFormat(NullDisplayText = "No Priority")]
    public Priority? Priority { get; set; }
    [ForeignKey("CategoryID")]
    public virtual Category Category { get; set; }
    public int CategoryID { get; set; }
    [ForeignKey("UserID")]
    public virtual User User { get; set; }
    public int UserID { get; set; }


    *public int AdminID { get; set; }
    public virtual Administrator Administrator { get; set; }*
}

1 个答案:

答案 0 :(得分:1)

Ticket的adminID属性不能接受nullable int,因此它必须具有admin。我猜你不想在开始时需要它,它会在以后分配吗?应该是int?