Entity Framework - 如何正确配置一对多关系导航属性
Entity Framework - How To Configure One-To-Many Relationship Navigation Properties Correctly
我有以下代码和基本的一对多设置。遵循 entityframeworktutorial.net 中的指南,我试图了解放置导航属性的位置。我使用 convention 4 如教程中所述,使用不可为 null 的键。
public class VendorImage
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int VendorImageId { get; set; }
[Required, MaxLength(50)]
public string ImageUrl { get; set; }
public int VendorId { get; set; }
public Vendor Vendor { get; set; }
}
public class Vendor
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int VendorId { get; set; }
[Required, MaxLength(50)]
public string Name { get; set; }
public ICollection<VendorImage> VendorImages { get; set; }
}
使用 postman 进行测试时,出现错误“检测到不支持的可能对象循环。”
然后我从 VendorImage
中删除 Vendor
属性,它工作正常。
这有解释吗?我想了解一下。
您的错误不是实体设计错误的结果,而是 json 序列化程序的错误。 json 序列化程序在 VendorImage class 中看到一个 Vendor 引用,无法处理对象嵌套。
要解决此问题,您可以执行此快速破解(这对 System.text.Json 和 NewtonSoft 都适用,但请确保使用正确的 using 语句):
public class VendorImage
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int VendorImageId { get; set; }
[Required, MaxLength(50)]
public string ImageUrl { get; set; }
public int VendorId { get; set; }
[JsonIgnore] //Add an attribute to ignore this property during serialization.
public Vendor Vendor { get; set; }
}
public class Vendor
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int VendorId { get; set; }
[Required, MaxLength(50)]
public string Name { get; set; }
public ICollection<VendorImage> VendorImages { get; set; }
}
或告诉您的服务忽略循环处理:
services.AddControllers().AddNewtonsoftJson(options =>
options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
);
我有以下代码和基本的一对多设置。遵循 entityframeworktutorial.net 中的指南,我试图了解放置导航属性的位置。我使用 convention 4 如教程中所述,使用不可为 null 的键。
public class VendorImage
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int VendorImageId { get; set; }
[Required, MaxLength(50)]
public string ImageUrl { get; set; }
public int VendorId { get; set; }
public Vendor Vendor { get; set; }
}
public class Vendor
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int VendorId { get; set; }
[Required, MaxLength(50)]
public string Name { get; set; }
public ICollection<VendorImage> VendorImages { get; set; }
}
使用 postman 进行测试时,出现错误“检测到不支持的可能对象循环。”
然后我从 VendorImage
中删除 Vendor
属性,它工作正常。
这有解释吗?我想了解一下。
您的错误不是实体设计错误的结果,而是 json 序列化程序的错误。 json 序列化程序在 VendorImage class 中看到一个 Vendor 引用,无法处理对象嵌套。
要解决此问题,您可以执行此快速破解(这对 System.text.Json 和 NewtonSoft 都适用,但请确保使用正确的 using 语句):
public class VendorImage
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int VendorImageId { get; set; }
[Required, MaxLength(50)]
public string ImageUrl { get; set; }
public int VendorId { get; set; }
[JsonIgnore] //Add an attribute to ignore this property during serialization.
public Vendor Vendor { get; set; }
}
public class Vendor
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int VendorId { get; set; }
[Required, MaxLength(50)]
public string Name { get; set; }
public ICollection<VendorImage> VendorImages { get; set; }
}
或告诉您的服务忽略循环处理:
services.AddControllers().AddNewtonsoftJson(options =>
options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
);