Избегайте или контролируйте циклические ссылки в Entity Framework CoreC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Избегайте или контролируйте циклические ссылки в Entity Framework Core

Сообщение Anonymous »

Я действительно покончил с этим, но, по крайней мере, я хочу знать, что происходит. Начнем:
Мой проект — это веб-приложение ASP.NET Core с Code First Entity Framework Core и интерфейсом Angular.
Я хочу контролировать, когда загружать ссылочные объекты. Они могут быть полезны, но также могут создавать циклические ссылки с внутренними ошибками во внешнем интерфейсе. (JSON будет бесконечно длинным.)
Модели:

Код: Выделить всё

class Book {
public virtual ICollection
 Pages { get; set; }
...simple properties
}

class Page {
public virtual Book Book { get; set; }
...simple properties
}
В этом примере каждая книга из books будет иметь пустой/нулевой список Страниц.

Код: Выделить всё

using (var context = new MoneyStatsContext())
{
var books = context.Books.Where(rule => rule.State == 1).ToList();
}
В этом примере списки Страниц не имеют значения NULL, и каждая Страница будет иметь это значение. Набор свойств Забронировать. Таким образом создается циклическая ссылка.

Код: Выделить всё

using (var context = new MoneyStatsContext())
{
var books = context.Books.Where(rule => rule.State == 1).Include(x => x.Pages).ToList();
}
Как избежать циклических ссылок? Неужели у меня действительно нет другого (более простого) выбора, кроме как создать новую модель и указать каждое свойство вручную?

Код: Выделить всё

.Select(new Book() {
...setting each property by hand
}
Неработающие решения, которые я нашел:
  • Попробовал установить это ложь и истину. Кажется, ничего не меняется.

Код: Выделить всё

public MyContext()
{
this.ChangeTracker.LazyLoadingEnabled = false;
}
  • Пытался указать это в Startup.cs, но options не имеет свойства SerializerSettings .

Код: Выделить всё

services.AddMvc().AddJsonOptions(options =>
{
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
});
Будем благодарны за любую помощь. Заранее спасибо.

Подробнее здесь: https://stackoverflow.com/questions/629 ... ework-core
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»