【发布时间】:2016-03-10 02:25:32
【问题描述】:
我正在使用 MVC Entity Framework 5 制作票务系统。
我的类是如何映射的:
用户到管理员是 1 到 0..1(我可以为一些用户分配管理员身份,但我不希望每个用户都拥有它)
工单管理员是一对一的(您只能为工单分配 1 个管理员(解决问题))
用户到工单是一对多(一个用户可以创建多个工单)
我遇到了这个问题,如果我使用没有 adminID 的用户创建票证(查看 here),它会给我以下错误:
INSERT 语句与 FOREIGN KEY 约束冲突 “FK_dbo.Ticket_dbo.Administrator_UserID”。冲突发生在 数据库“RecreationalServicesTicketingSystem.DAL.IssueContext”,表 “dbo.Administrator”,“用户 ID”列。该声明已 终止。
我认为问题在于“管理员到工单”之间的映射。 1 对 1 的关系强制条件是,如果我创建票证,用户必须具有“adminID”,否则数据库中存在冲突。
我的问题是管理员到工单的映射应该是什么来解决这个问题? 也许 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; }*
}
应用了 Andy 的解决方案,我将 Admin to Ticket 设置为 1:Many 关系
(在 Ticket.cs 中添加了public virtual Administrator Administrator { get; set; })
INSERT 语句与 FOREIGN KEY 约束冲突 “FK_dbo.Ticket_dbo.Administrator_UserID”。冲突发生在 数据库“RecreationalServicesTicketingSystem.DAL.IssueContext”,表 “dbo.Administrator”,“用户 ID”列。该声明已 终止。
管理员
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:1 - 只有一个管理员可以处理工单,管理员到工单 1:many - 一个管理员可以分配到多个工单。
-
有人建议我将 adminID 设为可为空的 int
int?。会有同样的效果吗?
标签: c# sql entity-framework