Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基本表设计中的外键约束异常_C#_Entity Framework Core - Fatal编程技术网

C# 基本表设计中的外键约束异常

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

我使用的是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 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; }
}

啊,是的,不正常!对不起,我瞎了眼;)谢谢!可能重复的