【问题标题】:Foreign key constraint exception in basic table design基本表设计中的外键约束异常
【发布时间】:2017-11-10 09:21:14
【问题描述】:

我正在使用 Entity Framework Core 并且有一个简单的 5 表设计,但出现错误并且无法弄清楚原因。我错过了什么?

例外:

引入 FOREIGN KEY 约束 'FK_GraphicItems_GraphicUploadTemplateItems_GraphicUploadTemplateItemId' 在表 'GraphicItems' 上可能会导致循环或多个级联路径。 指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

基地:

public abstract class Base
{
    public int Id { get; set; }
    public DateTime DateCreated { get; set; } = DateTime.Now;
}

客户:

public class Client : Base
{
    public Guid Key { get; set; }
    public string Name { get; set; }
}

图形:

public class Graphic : Base
{
    public int ClientId { get; set; }
    public virtual Client Client { get; set; }
    public ICollection<GraphicItem> Items { get; set; } = new HashSet<GraphicItem>();
    public ICollection<Tag> Tags { get; set; } = new HashSet<Tag>();
}

GraphicItem: (GraphicUploadTemplateId 属性导致异常)

public class GraphicItem : Base
{
    public int GraphicId { get; set; }
    public virtual Graphic Graphic { get; set; }
    public int GraphicUploadTemplateItemId { get; set; }
    public virtual GraphicUploadTemplateItem UploadTemplateItem { get; set; }
}

GraphicUploadTemplate:

public class GraphicUploadTemplate : Base
{
    public int ClientId { get; set; }
    public virtual Client client { get; set; }    
    public ICollection<GraphicUploadTemplateItem> Items { get; set; }
}

GraphicUploadTemplateItem:

public class GraphicUploadTemplateItem : Base
{
    public int GraphicUploadTemplateId { get; set; }
    public virtual GraphicUploadTemplate UploadTemplate { get; set; }
}

【问题讨论】:

标签: c# entity-framework-core


【解决方案1】:

已经通过GraphicItem.UploadTemplateItem.Id会有一个指向相应GraphicUploadTemplateItem的链接,我认为这会导致循环引用。

【讨论】:

  • 啊,是的,当然!抱歉我瞎了;)谢谢!
【解决方案2】:

通过将属性类型设置为可空来解决问题

public class GraphicItem : Base
{
    public int GraphicId { get; set; }
    public virtual Graphic Graphic { get; set; }
    public int? GraphicUploadTemplateItemId { get; set; }
    public virtual GraphicUploadTemplateItem UploadTemplate { get; set; }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    相关资源
    最近更新 更多