C# ASP.NET核心Web API&;实体框架核心;为什么我会犯这个错误?
我知道ASP.NET Core中的序列化程序可能无法处理某些响应,但当我不尝试返回有问题的对象时,为什么会出现此错误 请参见此处的错误: 当我尝试将我的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
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:检测到不支持的可能的对象循环。“听起来好像有一个循环引用,其中一个对象引用另一个对象,即引用原始对象。我认为这可能会导致序列化程序中出现无限循环。我建议不要从控制器返回实体类。相反,创建一个数据传输对象类,只将所需的属性映射到该类,然后返回该类。