Некорректная работа GET запроса контроллера API на ASP.NET CORE

Вот такой код работает:

[HttpGet]
public ActionResult<IEnumerable<Product>> Get()
{
    return db.Products.ToList();
}

Но если я хочу присвоить связанные данные то приходит статус 500. Вот например код который не работает:

[HttpGet]
public ActionResult<IEnumerable<Product>> Get()
{
    List<Product> products =  db.Products.ToList();
    foreach (var p in products)
    {
        p.ProductСharacteristics =  db.ProductСharacteristics.Where(t => p.Id == t.ProductId).ToList();
    }
    return db.Products.ToList();
}

Вот модели:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string LatinName { get; set; }
    public string ShortInfo { get; set; }
    public int Price { get; set; }

    public List<ProductСharacteristic> ProductСharacteristics { get; set; }
    public Product()
    {
        ProductСharacteristics = new List<ProductСharacteristic>();
    }
}

public class ProductСharacteristic
{
    public int Id { get; set; }
    public string Main { get; set; }
    public string Minor { get; set; }


    public int ProductId { get; set; }
    public Product Product { get; set; }
}

Вот контроллер:

[ApiController]
[Route("api/[controller]")]
public class ProductController : ControllerBase
{
    ProductsContext db;

    public ProductController(ProductsContext context)
    {
        db = context;
    }

    [HttpGet]
    public ActionResult<IEnumerable<Product>> Get()
    {
        List<Product> products =  db.Products.ToList();
        foreach (var p in products)
        {
            p.ProductСharacteristics =  db.ProductСharacteristics.Where(t => p.Id == t.ProductId).ToList();
        }
        return db.Products.ToList();
    }
}

Ответы (1 шт):

Автор решения: Igor Borzenkov

Более лаконичным и правильным будет указать EF через навигационное свойство ProductСharacteristics необходимость загрузки в результирующий список продуктов зависимого содержимого. Например, это можно сделать так:

[HttpGet]
public ActionResult<IEnumerable<Product>> Get()
{
    return db.Products.Include(p => p.ProductСharacteristics).ToList();
}
→ Ссылка