Я делаю 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();
Но теперь он ничего не обновляет, он возвращает мне карту, как я хочу, но не обновлять ее в БД, любая идея?