基本表设计中的外键约束异常
Posted
技术标签:
【中文标题】基本表设计中的外键约束异常【英文标题】: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;
【问题讨论】:
Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths - why?的可能重复 【参考方案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;
【讨论】:
以上是关于基本表设计中的外键约束异常的主要内容,如果未能解决你的问题,请参考以下文章
如何在删除时处理 MySql + Laravel 中的外键约束?