دوره آموزشی Entity FrameWork Core - قسمت 25
از آنجایی که EF Core به طور خودکار navigation propertyها را اصلاح میکند، میتوانید در نهایت چرخههایی را در گراف شی خود داشته باشید. به عنوان مثال، بارگیری یک blog و postهای مرتبط با آن منجر به یک شی blogمی شود که به مجموعه ای از postها ارجاع می دهد. هر یک از آن postها یک reference به blog خواهند داشت.
برخی از serialization frameworkها چنین چرخههایی را مجاز نمیدانند. به عنوان مثال، Json.NET استثنای زیر را در صورت یافتن یک چرخه ایجاد می کند.( اگر عمق شی بزرگتر از حداکثر عمق مجاز 32 باشد)
Newtonsoft.Json.JsonSerializationException: Self referencing loop detected for property 'Blog' with type 'MyApplication.Models.Blog'.
شما دو گزینه دارید:
اجتناب از circular references :
اگر از ASP.NET Core استفاده میکنید، میتوانید Json.NET را طوری پیکربندی کنید که چرخههایی را که در گراف شی پیدا میکند نادیده بگیرد. این پیکربندی در متد (...) ConfigureServices در Program.cs انجام
می شود.
services.AddControllers().AddJsonOptions(x => x.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles);
نادیده گرفتن circular references :
جایگزین دیگر استفاده از [JsonIgnore] برروی navigation propertyهاست که به Json.NET دستور میدهد در حین serializing از آن navigation property عبور نکند.
در صورت لزوم می توانید استفاده از ReferenceHandler.Preserve را در JsonSerializerOptions برای پشتیبانی از چرخه ها در نظر بگیرید.
بیشتر بخوانید : دوره آموزشی Entity FrameWork Core - قسمت 27
بیشتر بخوانید : دوره آموزشی Entity FrameWork Core
بیشتر بخوانید : نقشه راه توسعه دهندگان Asp.NET Core