Циркулярная справка EF Core Entity - PullRequest
0 голосов
/ 09 сентября 2018

Я использую C # .net и ef core. У меня есть модели ниже. Когда я получаю свой список соревнований, я хочу получить только моего соответствующего пользователя. Тем не менее, я получаю пользователя и все конкурсы пользователя. Как мне этого добиться? Мне нужно было сделать следующее, чтобы показать мой список соревнований:

.AddJsonOptions(opt => opt.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore)

public partial class Competition
{
    public int CompetitionId { get; set; }
    public int UserId { get; set; }

    public User User { get; set; }
}

public partial class User
{

    public int UserId { get; set; }
    public string Email { get; set; }
    public string UserName { get; set; }

    public ICollection<Competition> Competitions { get; set; }
}

У меня есть API, который использует Entity Framework для звонков в мою базу данных, используя модели, описанные выше. Вызов в моем API, который вызывает циклическую ссылку, следующий:

    [Produces("application/json")]
    [Route("api/Competitions")]
    public class CompetitionsController : Controller
    {
        private readonly ApplicationDBContext _context;

        public CompetitionsController(ApplicationDBContext  context)
        {
            _context = context;
        }

        // GET: api/Competitions
        [HttpGet]
        public IEnumerable<Competition> GetCompetitions()
        {
            //return _context.Competitions;
            return _context.Competitions
                .Include(u => u.User).ToList();
        }
    }

Ниже приведен мой блок кода для создания в моем классе ApplicationDBContext:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Competition>(entity =>
        {
            entity.HasKey(e => e.CompetitionId);

            entity.HasOne(d => d.User)
                .WithMany(p => p.Competitions)
                .HasForeignKey(d => d.UserId)
                .OnDelete(DeleteBehavior.ClientSetNull)
                .HasConstraintName("FK_Competitions_Users");
        });

        modelBuilder.Entity<User>(entity =>
        {
            entity.HasKey(e => e.UserId);

            entity.HasIndex(e => e.UserName)
                .HasName("UC_UserName")
                .IsUnique();

            entity.Property(e => e.Email)
                .HasMaxLength(40)
                .IsUnicode(false);

            entity.Property(e => e.UserName)
                .HasMaxLength(40)
                .IsUnicode(false);
        });
    }

1 Ответ

0 голосов
/ 09 сентября 2018

Вы должны были игнорировать коллекцию Соревнований в пользовательской модели при сборке.

 modelBuilder.Entity<User>()
            .Ignore(b => b.Competitions);
...