繁体   English   中英

ASP.NET MVC 3 EF代码优先-外键问题

[英]ASP.NET MVC 3 EF Code First - Problems with FOREIGN KEYS

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

这是我的情况。 我正在构建一个应用程序,该应用程序使我们可以针对任何系统记录故障单并自动将故障单分配给相关人员。

我们有服务,可以有很多类别。 类别可以有许多子类别。 可以将服务台人员分配给“服务”以及“类别”或“子类别”。

这是我的课程:

Service.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; }
}

Category.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; }
}

Subcategory.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约束“ Subcategory_Service”可能会导致循环或多个级联路径。 指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。 无法创建约束。 请参阅先前的错误。

我猜测问题出在我如何定义键和外键的问题上。 任何帮助表示赞赏。 谢谢。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM