I have two models which are related like following:
public class Context { [Key] public long ContextId { get; set; } [Required] public string Role { get; set; } public ICollection<Connection> Connections { get; set; } public Context() { } } And
public class Connection { [Key] public long ConnectionId { get; set; } public string Name { get; set; } public long ContextId { get; set; } public Context Context { get; set; } public Connection() { } } I have a repository for Context:
public class ContextRepository: IContextRepository { private readonly WebAPIDataContext _db; public ContextRepository(WebAPIDataContext db) { _db = db; } public Context CreateContext(Context context) { _db.Contexts.Add(context); _db.SaveChanges(); return context; } public void DeleteContext(long id) { Context context = GetContext(id); if (context != null) { _db.Contexts.Remove(context); _db.SaveChanges(); } } public List<Context> GetAllContexts() { return _db.Contexts .Include(context => context.Connections) .ToList(); } public Context GetContext(long id) { return _db.Contexts.FirstOrDefault(o => o.ContextId == id); } public void UpdateContext(long id, Context context) { Context contextToUpdate = _db.Contexts.FirstOrDefault(o => o.ContextId == id); contextToUpdate.Role = context.Role; contextToUpdate.Connections = context.Connections; _db.Update(contextToUpdate); _db.SaveChanges(); } } Swagger gives me skeleton like following:
{ "contextId": 0, "role": "string", "connections": [ { "connectionId": 0, "name": "string", "contextId": 0, "context": {} } ] } If I fill "Role":"Worker" and "name":"Max" and do POST or similar in PUT then it gives me error:
{ "Connections[0].Context.Role": [ "The Role field is required." ] } Why is it so? I want to be able to POST or PUT data even if I do not fill connections related fields. Right now I have controller only for Context.
UPDATE: Controller:
[Route("api/[controller]")] public class ContextController : Controller { private readonly IContextRepository _contexts; public ContextController(IContextRepository contexts) { _contexts = contexts; } [HttpGet("")] public IActionResult GetAllContexts() { try { List<Context> contexts = _contexts.GetAllContexts(); return Ok(contexts); } catch (EntityNotFoundException<Context>) { return NotFound(); } } [HttpGet("{id}")] public IActionResult GetContext(long id) { Context context= _contexts.GetContext(id); if (context == null) { return NotFound(); } return Ok(context); } [HttpPost] public IActionResult CreateContext([FromBody] Context context) { if (ModelState.IsValid == false) { return BadRequest(ModelState); } Context createdContext= _contexts.CreateContext(context); if (createdContext== null) { return NotFound(); } return CreatedAtAction( nameof(GetContext), new { id = createdContext.ContextId}, createdContext); } [HttpPut("{id}")] public IActionResult UpdateContext(long id, [FromBody] Context context) { if (ModelState.IsValid == false) { return BadRequest(ModelState); } try { _contexts.UpdateContext(id, context); return Ok(); } catch (EntityNotFoundException<Context>) { return NotFound(); } } [HttpDelete("{id}")] public IActionResult DeleteCOntext(long id) { _contexts.DeleteContext(id); return Ok(); } }