Я не уверен, как получить необходимую информацию, используя EF Core с приложением .NET Core. У меня есть две таблицы базы данных - OBJECTS и TAGS с отношением «многие ко многим» (используется третья таблица соединений OBJECTTAGS). Я хочу получить все объекты (около 1400) вместе с соответствующими тегами.
Это мои три модели:
using System;
using System.Collections.Generic;
namespace ContentMarketplace.Models
{
public partial class Object
{
public int ObjectId { get; set; }
...
public virtual List<ObjectTag> ObjectTags { get; set; }
}
}
namespace ContentMarketplace.Models
{
public partial class Tag
{
public int TagId { get; set; }
...
public virtual List<ObjectTag> ObjectTags { get; set; }
}
}
namespace ContentMarketplace.Models
{
public partial class ObjectTag
{
public int ObjectId { get; set; }
public virtual Object Object { get; set; }
public int TagId { get; set; }
public virtual Tag Tag { get; set; }
}
}
И это то, что в методе OnModelCreating () в моем контексте:
modelBuilder.Entity<ObjectTag>(entity =>
{
entity.HasKey(e => new { e.ObjectId, e.TagId });
entity.HasOne(ot => ot.Object)
.WithMany(o => o.ObjectTags)
.HasForeignKey(ot => ot.ObjectId);
entity.HasOne(ot => ot.Tag)
.WithMany(t => t.ObjectTags)
.HasForeignKey(ot => ot.TagId);
});
Эта проблема возникает, когда я пытаюсь вернуть данные в мой ObjectController.cs
namespace ContentMarketplace.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ObjectController : ControllerBase
{
private readonly ContentMarketplaceContext _context;
public ObjectController(ContentMarketplaceContext context)
{
_context = context;
}
[HttpGet]
public ActionResult<List<ContentMarketplace.Models.Object>> GetAll()
{
return _context.Objects
.Include(o => o.ObjectTags)
.ThenInclude(ot => ot.Tag)
.ToList();
}
}
}
Функция Include (). ThenInclude () создает циклическое отношение, в котором HTTP-запрос не только возвращает информацию о тегах, связанных с каждым объектом, но затем все объекты, связанные с каждым из этих тегов, и т. Д., Что приводит к сбою браузера.
Если я уберу ThenInclude (), он работает нормально, но не возвращает всю информацию о тегах, отсутствующую в моей модели ObjectTag.
Я знаю, что это связано с тем, что EF Core автоматически загружает материал, который уже находится в контексте (например, примечания к «подсказке» здесь https://docs.microsoft.com/en-us/ef/core/querying/related-data), но я не знаю, как еще вернуть JUST объект и теги без идти дальше.