C# ASP.NET核心Web API&;实体框架核心;为什么我会犯这个错误?

C# ASP.NET核心Web API&;实体框架核心;为什么我会犯这个错误?,c#,asp.net-core,asp.net-web-api,entity-framework-core,C#,Asp.net Core,Asp.net Web Api,Entity Framework Core,我知道ASP.NET Core中的序列化程序可能无法处理某些响应,但当我不尝试返回有问题的对象时,为什么会出现此错误 请参见此处的错误: 当我尝试将我的ProjectResourceRequest与我的ProjectResourceAssignment关联时,它会写入数据库,但会抛出该错误 模型类: public abstract class DivDbBase { [Key] public int Id { get; set; } [Required] pu

我知道ASP.NET Core中的序列化程序可能无法处理某些响应,但当我不尝试返回有问题的对象时,为什么会出现此错误

请参见此处的错误:

当我尝试将我的
ProjectResourceRequest
与我的
ProjectResourceAssignment
关联时,它会写入数据库,但会抛出该错误

模型类:

public abstract class DivDbBase
{
    [Key]
    public int Id { get; set; }

    [Required]
    public DateTimeOffset DateCreated { get; set; }

    public int CreatedByUserId { get; set; }

    [Required]
    public DateTimeOffset LastDateModified { get; set; }

    public int LastModifiedByUserId { get; set; }

    //[ForeignKey("CreatedByUserId")]
    //public DivDbUser CreatedByUser { get; set; }

    //[ForeignKey("LastModifiedByUserId")]
    //public DivDbUser LastModifiedByUser { get; set; }
}

public interface IDivDbEvent
{
    [Required]
    public DateTimeOffset StartDate { get; set; }

    [Required]
    public DateTimeOffset EndDate { get; set; }
}

public class DivDbProjectResourceRequest : DivDbBase, IDivDbEvent
{
    public int ProjectId { get; set; }
    public int RoleId { get; set; }

    [Required]
    public DateTimeOffset StartDate { get; set; }

    [Required]
    public DateTimeOffset EndDate { get; set; }

    [ForeignKey("ProjectId")]
    public DivDbProject Project { get; set; }

    [ForeignKey("RoleId")]
    public DivDbRole Role { get; set; }
}
    public class DivDbProjectResourceAssignment : DivDbBase, IDivDbEvent
{
    public int ProjectId { get; set; }
    public int RoleId { get; set; }
    public int UserId { get; set; }

    public int? ProjectResourceRequestId { get; set; }

    public DateTimeOffset StartDate { get; set; }
    public DateTimeOffset EndDate { get; set; }

    [ForeignKey("ProjectId")]
    public DivDbProject Project { get; set; }

    [ForeignKey("RoleId")]
    public DivDbRole Role { get; set; }

    [ForeignKey("UserId")]
    public DivDbUser User { get; set; }

    [ForeignKey("ProjectResourceRequestId")]
    public DivDbProjectResourceRequest ProjectResourceRequest { get; set; }
}
然后在我的控制器
ProjectResourceRequest
中已经存在,并且我不尝试返回任何一个复杂对象:

DivDbProjectResourceAssignment dbProjectResourceAssignment = new DivDbProjectResourceAssignment()
{
    ProjectId = 1,
    RoleId = 1,
    UserId = 1,
    StartDate = DateTimeOffset.Now,
    EndDate = DateTimeOffset.Now,
    ProjectResourceRequestId = 1,
    CreatedByUserId = 1,
    LastModifiedByUserId = 1,
    LastDateModified = DateTimeOffset.Now,
    DateCreated = DateTimeOffset.Now
};
mContext.ProjectResourceAssignments.Add(dbProjectResourceAssignment);

mContext.SaveChanges();

项目已正确添加,但无论我是否返回该项目,它都会使控制器响应崩溃。如果我现在要使用
mContext
从数据库访问该项,我会再次遇到相同的错误…无论我是否以任何形式从API控制器返回该项。

因此,问题是我正在从控制器返回EntityFramework核心类。这让我感到惊讶的原因是,返回的对象没有任何关系,只是因为与McContext交互的其他对象有关系,才导致了对错误的整个响应。

链接不适用于meHi,请以文本形式发布错误图像适用于我,错误消息的第一部分是:“JsonException:检测到不支持的可能的对象循环。“听起来好像有一个循环引用,其中一个对象引用另一个对象,即引用原始对象。我认为这可能会导致序列化程序中出现无限循环。我建议不要从控制器返回实体类。相反,创建一个数据传输对象类,只将所需的属性映射到该类,然后返回该类。