EF6 API обновляет данные в отношении многие ко многим - PullRequest
0 голосов
/ 26 мая 2018

Я делаю API с картами, эффектами и сериями.У Карты может быть много Серий и много Эффектов, у Серии может быть много Карт, а у Эффектов может быть много Карт.Я исправил циклическую ссылку, теперь моя проблема в том, что когда я хочу добавить / обновить (используя Postman с POST / PUT) для примера новую карту с существующей серией, она создает новую серию, как я могу это исправить?

public class Card
{
    public Card()
    {
        this.Effects = new HashSet<Effect>();
        this.Series = new HashSet<Serie>();
    }

    [Key]
    public int Id { get; set; }

    [Required]
    public string Name { get; set; }

    [Required]
    public string Number { get; set; }

    public string Text { get; set; }

    [Required]
    public int Cost { get; set; }

    [Required]
    public string Element { get; set; }

    [Required]
    public string Job { get; set; }

    [Required]
    public virtual ICollection<Serie> Series { get; set; }

    public int? Strengh { get; set; }

    public string Picture { get; set; }

    public virtual ICollection<Effect> Effects { get; set; }
}

public class Serie
{
    public Serie()
    {
        this.Cards = new HashSet<Card>();
    }

    [Key]
    public int Id { get; set; }

    [Required]
    public string Name { get; set; }

    public virtual ICollection<Card> Cards { get; set; }
}

Вот запрос PUT в CardsController

    // PUT: api/Cards/5
    [ResponseType(typeof(void))]
    public async Task<IHttpActionResult> PutCard(int id, Card card)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        if (id != card.Id)
        {
            return BadRequest();
        }

        db.Entry(card).State = EntityState.Modified;

        try
        {
            await db.SaveChangesAsync();
        }
        catch (DbUpdateConcurrencyException)
        {
            if (!CardExists(id))
            {
                return NotFound();
            }
            else
            {
                throw;
            }
        }

        return StatusCode(HttpStatusCode.NoContent);
    }

Должен ли я удалить и написать свой собственный запрос PUT или должен изменить конфигурацию?

РЕДАКТИРОВАТЬ: я исправил проблемудобавив

db.Entry(card).State = EntityState.Modified;
foreach (var item in card.Effects)
{
     db.Entry(item).State = EntityState.Modified;
}
foreach (var item in card.Series)
{
     db.Entry(item).State = EntityState.Modified;
}
db.SaveChanges();

Но теперь он ничего не обновляет, он возвращает мне карту, как я хочу, но не обновлять ее в БД, любая идея?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...