В одном методе на вызове кнопки стал получать ошибку
Self referencing loop detected for property 'task' with type 'System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1+AsyncStateMachineBox`1
интересно то, что подозрительного нет ничего в методе где падает, просто вызов получения данных из таблицы ef контекста
такой же код написал на другую кнопку и там всё проходит.
как искать причину такой ошибки?
скорее всего это ошибка возникающая при сериализации. что в свою очередь является следствием подхода, испольуземого при построения графа объектов, состоящих из более чем одного ентити/таблицы. решить можно либо похимичив с 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));
});
//...
}
P>как искать причину такой ошибки?
Если дело действительно в json-сериализации, как предполагает коллега выше, то, вероятно, где-то пропущен await.
// Т.е. вместо условно такого:
var data = await GetDataAsync();
return data.ToJson()
// Написано так:
var data = GetDataAsync();
return data.ToJson(); // И тут сериализуется task, а не данные
Здравствуйте, 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>
в точку! Спасибо!
Странно, что компилятор не ругается на такие вещи