【问题标题】:ASP.NET MVC 3 EF Code First - Problems with FOREIGN KEYSASP.NET MVC 3 EF Code First - 外键问题
【发布时间】:2012-01-19 12:12:27
【问题描述】:

在使用实体框架代码优先时,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; }
}

子类别.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; }

}

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

在表 'Subcategories' 上引入 FOREIGN KEY 约束 'Subcategory_Service' 可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。 无法创建约束。查看以前的错误。

我猜问题在于我如何定义 Key 和 ForeignKey。任何帮助表示赞赏。谢谢。

【问题讨论】:

    标签: c# foreign-keys ef-code-first


    【解决方案1】:

    取决于您的需求。您可以在您的实体的配置中使用WillCascadeOnDelete(false)1 或全局删除OneToManyCascadeDeleteConvention2

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

    【讨论】:

    • 感谢您的回复。我在哪里设置这个配置?它会在 DbContext 中吗?
    • @GarethLewis 没错。我还用更多细节更新了我的答案。
    猜你喜欢
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 2023-04-11
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多