【发布时间】:2016-08-23 10:28:55
【问题描述】:
我的 Asp.Net Mvc 项目中有 4 个模型类。我正在使用实体框架代码优先(自动迁移)。我在运行命令 update-database 时,出现以下错误;
在表“Tickets”上引入 FOREIGN KEY 约束“FK_dbo.Tickets_dbo.Users_CreatedUserId”可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。 无法创建约束或索引。查看以前的错误。
有什么问题?
//Company Class
public class Company
{
public int Id { get; set; }
[Required, StringLength(100)]
public string Title { get; set; }
public virtual ICollection<User> Users { get; set; } = new HashSet<User>();
}
//User Class
public class User
{
public int Id { get; set; }
[Required, StringLength(50)]
public string UserName { get; set; }
[Required, StringLength(100)]
public string FullName { get; set; }
public int CompanyId { get; set; }
public virtual Company Company { get; set; }
}
//Ticket Class
public class Ticket
{
public int Id { get; set; }
[Required]
public DateTime CreationDate { get; set; }
[Required, StringLength(100)]
public string Title { get; set; }
public bool IsClosed { get; set; }
public int CreatedUserId { get; set; }
public virtual User CreatedUser { get; set; }
public virtual ICollection<TicketMessage> Messages { get; set; } = new HashSet<TicketMessage>();
}
//TicketMessage Class
public class TicketMessage
{
public int Id { get; set; }
public DateTime Date { get; set; }
[Required]
public string Message { get; set; }
public int UserId { get; set; }
public virtual User User { get; set; }
public int TicketId { get; set; }
public virtual Ticket Ticket { get; set; }
}
【问题讨论】:
-
那是因为表
Users有很多Tickets和很多TicketMessages,同时Ticket有很多TicketMessages。 -
是的,应该是这样的。因为,用户可以创建工单和工单消息。
-
但是如果您删除一个特定的
User,SQL 引擎不知道该怎么办。你应该按照字面意思做:指定是ON DELETE NO ACTION还是自定义delete trigger
标签: c# asp.net-mvc entity-framework ef-code-first code-first