关于一对一导航的疑问

虽然现在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,为什么能正常运行?我也没看到这个有特别的处理代码呀,特此求解,谢谢。


请先 登录 后评论
  • 0 关注
  • 0 收藏,143 浏览
  • imadmin 提出于 2022-11-29 01:54

相似问题