虽然现在net6已经很火了,但我还是在艰难学习core3.1的路上。下面问个导航问题:
广告位和广告的关系,在DT中是一对多的关系,但为了方便,我拿它作例子,改成一对一(其实我也不清楚是不是这样叫),就像下面这样:
/// <summary>
/// 广告位
/// </summary>
public class Advert
{
/// <summary>
/// 自增ID
/// </summary>
[Display(Name = "自增ID")]
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
/// <summary>
/// 广告内容列表
/// </summary>
public AdvertBanner Banner { get; set; }
}
/// <summary>
/// 广告内容
/// </summary>
public class AdvertBanner
{
/// <summary>
/// 自增ID
/// </summary>
[Display(Name = "自增ID")]
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
/// <summary>
/// 所属广告位
/// </summary>
[Display(Name = "所属广告位")]
[ForeignKey("Advert")]
public int AdvertId { get; set; }
/// <summary>
/// 广告位信息
/// </summary>
public Advert Advert { get; set; }
}
等执行查询的时候,就会报错:An unhandled exception was thrown by the application. Newtonsoft.Json.JsonSerializationException: Self referencing loop detected for property,大概意思就是说引用循环了,为此我查了很多资料,找到下面一个设置:
services.AddControllers().AddNewtonsoftJson(options => { options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; });
确实不报错了,但是好像还是会造成其它问题,所以不能根本解决问题。
我又将AdvertBanner中的Advert 去掉,意思是说AdvertBanner可以查询到一个Advert ,但Advert 不能反查AdvertBanner,还是报错了,好像是报了个找不到字段吧。
但我看DT本身的代码就有这种关系,Members中包含了ApplicationUser,而ApplicationUser又包含了Members,为什么能正常运行?我也没看到这个有特别的处理代码呀,特此求解,谢谢。