ASP.NET MVC 3 EF代码优先-FOREING KEYS的问题

本文关键字:-FOREING KEYS 问题 代码 NET MVC EF ASP | 更新日期: 2023-09-27 18:20:52

在使用实体框架代码优先时,SQL Server创建外键约束时遇到问题。

这是我的场景。我正在构建一个应用程序,该应用程序允许我们根据任何系统记录票证,并自动将票证分配给相关人员。

我们有服务,可以有很多类别。类别可以有许多子类别。服务台人员可以分配到"服务"、"类别"或"子类别"。

以下是我的课程:

服务.cs

public class Service
{
    [Key]
    public int ServiceID { get; set; }
    public string Title { get; set; }
    public DateTime CreatedDate { get; set; }
    public HelpDeskMember CreatedBy { get; set; }
    public DateTime? DeletedDate { get; set; }
    public HelpDeskMember DeletedBy { get; set; }
    public virtual ICollection<Category> Categories { get; set; }
    public virtual ICollection<Subcategory> Subcategories { get; set; }
    public virtual ICollection<HelpDeskMember> LinesOfSupport { get; set; }
}

类别.cs

public class Category
{
    [Key]
    public int CategoryID { get; set; }
    [ForeignKey("Service")]
    public int ServiceID { get; set; }
    public string Title { get; set; }
    public DateTime CreatedDate { get; set; }
    public HelpDeskMember CreatedBy { get; set; }
    public DateTime? DeletedDate { get; set; }
    public HelpDeskMember DeletedBy { get; set; }
    public virtual Service Service { get; set; }
    public virtual ICollection<Subcategory> Subcategories { get; set; }
    public virtual ICollection<HelpDeskMember> LinesOfSupport { get; set; }
}

子类别.cs

public class Subcategory
{
    [Key]
    public int SubcategoryID { get; set; }
    [ForeignKey("Service")]
    public int ServiceID { get; set; }
    [ForeignKey("Category")]
    public int CategoryID { get; set; }
    public string Title { get; set; }
    public DateTime CreatedDate { get; set; }
    public HelpDeskMember CreatedBy { get; set; }
    public DateTime? DeletedDate { get; set; }
    public HelpDeskMember DeletedBy { get; set; }
    public virtual Service Service { get; set; }
    public virtual Category Category { get; set; }
    public virtual ICollection<HelpDeskMember> LinesOfSupport { get; set; }       
}

最后是HelpDeskMember.cs

public class HelpDeskMember
{
    public int HelpDeskMemberID { get; set; }
    public string Name { get; set; }
    public bool Admin { get; set; }
    public bool Available { get; set; }
    public DateTime? CreatedDate { get; set; }
    public DateTime? LastLogin { get; set; }
    public DateTime? DeletedDate { get; set; }
    public DateTime? DeletedBy { get; set; }
    public virtual ICollection<Service> Services { get; set; }
    public virtual ICollection<Category> Categories { get; set; }
    public virtual ICollection<Subcategory> Subcategories { get; set; }
}

当数据库正在初始化时,我收到以下错误消息:

在表"子类别"中引入FOREIGN KEY约束"子类别_服务"可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。无法创建约束。请参阅以前的错误

我猜问题出在我如何定义Key和ForeignKey。感谢您的帮助。谢谢

ASP.NET MVC 3 EF代码优先-FOREING KEYS的问题

根据您的需要而定。您可以在实体的配置中使用WillCascadeOnDelete(false) 1或全局删除OneToManyCascadeDeleteConvention 2。

两者都可以在OnModelCreating中使用ModelBuilder输入参数进行设置。