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。感谢您的帮助。谢谢
根据您的需要而定。您可以在实体的配置中使用WillCascadeOnDelete(false)
1或全局删除OneToManyCascadeDeleteConvention
2。
两者都可以在OnModelCreating中使用ModelBuilder
输入参数进行设置。