public async Task <ActionResult <PersonName> > Post(string name, string malemidname = null, string femalemidname = null) { if (!string.IsNullOrWhiteSpace(name) && _ctx.PersonNameExists(name)) { return(Conflict()); } else { if (!string.IsNullOrWhiteSpace(name)) { var gender = string.IsNullOrWhiteSpace(malemidname) || string.IsNullOrWhiteSpace(femalemidname) ? Gender.F : Gender.M; var item = new PersonName { Name = name, Gender = gender, Part = NamePart.FIRST }; if (gender == Gender.M && !string.IsNullOrWhiteSpace(malemidname) && !string.IsNullOrWhiteSpace(femalemidname)) { item.Derived.Add(new PersonName { Name = malemidname, Gender = Gender.M, Part = NamePart.MID, BaseName = item }); item.Derived.Add(new PersonName { Name = femalemidname, Gender = Gender.F, Part = NamePart.MID, BaseName = item }); } ; _ctx.PersonNames.Add(item); await _ctx.SaveChangesAsync(); return(CreatedAtAction("Get", new { Id = item.Id }, item)); } else { return(BadRequest()); }; }; }