Как искать причину такой ошибки?
От: peer  
Дата: 12.09.23 19:56
Оценка:
В одном методе на вызове кнопки стал получать ошибку

Self referencing loop detected for property 'task' with type 'System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1+AsyncStateMachineBox`1


интересно то, что подозрительного нет ничего в методе где падает, просто вызов получения данных из таблицы ef контекста
такой же код написал на другую кнопку и там всё проходит.

как искать причину такой ошибки?
Re: Как искать причину такой ошибки?
От: 尿컙拋㕪⬎⤇Ǥ꧃푙刾ꄔ൒  
Дата: 12.09.23 20:19
Оценка:
скорее всего это ошибка возникающая при сериализации. что в свою очередь является следствием подхода, испольуземого при построения графа объектов, состоящих из более чем одного ентити/таблицы. решить можно либо похимичив с navigation свойствами, игнором либо заменой на анонимные типы или просто запретить сериалайзеру ходить по кругу. Удивлен видеть это безобразие неотключенным по умолчанию.

вот, тред, содержаюй возможные решения проблемы:

https://stackoverflow.com/questions/19467673/entity-framework-self-referencing-loop-detected

самое простое:

public void ConfigureServices(IServiceCollection services)
    {

        services.AddMvc(options =>
        {
            options.OutputFormatters.Clear();
            options.OutputFormatters.Add(new JsonOutputFormatter(new JsonSerializerSettings()
            {
                ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
            }, ArrayPool<char>.Shared));
        });

        //...
    }
Отредактировано 13.09.2023 8:26 尿컙拋㕪⬎⤇Ǥ꧃푙刾ꄔ൒ . Предыдущая версия . Еще …
Отредактировано 12.09.2023 21:50 尿컙拋㕪⬎⤇Ǥ꧃푙刾ꄔ൒ . Предыдущая версия .
Отредактировано 12.09.2023 21:49 尿컙拋㕪⬎⤇Ǥ꧃푙刾ꄔ൒ . Предыдущая версия .
Re: Как искать причину такой ошибки?
От: RushDevion Россия  
Дата: 13.09.23 09:32
Оценка: 9 (2)
P>как искать причину такой ошибки?

Если дело действительно в json-сериализации, как предполагает коллега выше, то, вероятно, где-то пропущен await.
// Т.е. вместо условно такого:
var  data = await GetDataAsync();
return data.ToJson()

// Написано так:
var  data = GetDataAsync();
return data.ToJson(); // И тут сериализуется task, а не данные
Re[2]: Как искать причину такой ошибки?
От: 尿컙拋㕪⬎⤇Ǥ꧃푙刾ꄔ൒  
Дата: 13.09.23 11:52
Оценка:
spot on:
https://github.com/dotnet/aspnetcore/issues/13272

попытка сериализовать таск
Отредактировано 13.09.2023 11:52 尿컙拋㕪⬎⤇Ǥ꧃푙刾ꄔ൒ . Предыдущая версия .
Re[2]: Как искать причину такой ошибки?
От: peer  
Дата: 13.09.23 12:21
Оценка:
Здравствуйте, RushDevion, Вы писали:

P>>как искать причину такой ошибки?


RD>Если дело действительно в json-сериализации, как предполагает коллега выше, то, вероятно, где-то пропущен await.

RD>
RD>// Т.е. вместо условно такого:
RD>var  data = await GetDataAsync();
RD>return data.ToJson()

RD>// Написано так:
RD>var  data = GetDataAsync();
RD>return data.ToJson(); // И тут сериализуется task, а не данные
RD>


в точку! Спасибо!
Странно, что компилятор не ругается на такие вещи
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.