C# 基本表设计中的外键约束异常
我使用的是EntityFrameworkCore,有一个简单的5表设计,但出现了一个错误,无法找出原因。我错过了什么 例外情况:C# 基本表设计中的外键约束异常,c#,entity-framework-core,C#,Entity Framework Core,我使用的是EntityFrameworkCore,有一个简单的5表设计,但出现了一个错误,无法找出原因。我错过了什么 例外情况: 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 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>();
}
public class GraphicUploadTemplate : Base
{
public int ClientId { get; set; }
public virtual Client client { get; set; }
public ICollection<GraphicUploadTemplateItem> Items { get; set; }
}
public class GraphicUploadTemplateItem : Base
{
public int GraphicUploadTemplateId { get; set; }
public virtual GraphicUploadTemplate UploadTemplate { get; set; }
}
引入外键约束
'FK_GraphicItems_GraphicUploadTemplateItems_GraphicUploadTemplateItemId'
表上的“GraphicItems”可能导致循环或多个级联路径。
指定在删除时不执行操作或在更新时不执行操作,或修改其他
外键约束
基础:
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>();
}
public class GraphicUploadTemplate : Base
{
public int ClientId { get; set; }
public virtual Client client { get; set; }
public ICollection<GraphicUploadTemplateItem> Items { get; set; }
}
public class GraphicUploadTemplateItem : Base
{
public int GraphicUploadTemplateId { get; set; }
public virtual GraphicUploadTemplate UploadTemplate { get; set; }
}
客户端:
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>();
}
public class GraphicUploadTemplate : Base
{
public int ClientId { get; set; }
public virtual Client client { get; set; }
public ICollection<GraphicUploadTemplateItem> Items { get; set; }
}
public class GraphicUploadTemplateItem : Base
{
public int GraphicUploadTemplateId { get; set; }
public virtual GraphicUploadTemplate UploadTemplate { get; set; }
}
图形:
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>();
}
public class GraphicUploadTemplate : Base
{
public int ClientId { get; set; }
public virtual Client client { get; set; }
public ICollection<GraphicUploadTemplateItem> Items { get; set; }
}
public class GraphicUploadTemplateItem : Base
{
public int GraphicUploadTemplateId { get; set; }
public virtual GraphicUploadTemplate UploadTemplate { get; set; }
}
图形上传模板:
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>();
}
public class GraphicUploadTemplate : Base
{
public int ClientId { get; set; }
public virtual Client client { get; set; }
public ICollection<GraphicUploadTemplateItem> Items { get; set; }
}
public class GraphicUploadTemplateItem : Base
{
public int GraphicUploadTemplateId { get; set; }
public virtual GraphicUploadTemplate UploadTemplate { get; set; }
}
通过GraphicItem.UploadTemplateItem.Id将有一个指向相应GraphicUploadTemplateItem的链接,我认为这会导致循环引用。通过将属性类型设置为nullable,修复了该问题
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; }
}
啊,是的,不正常!对不起,我瞎了眼;)谢谢!可能重复的