Create nested data from JSON using .net core Entity Framework

.net .net-core c# entity-framework entity-framework-core

Question

I wan't to create a "Group" using http POST request. The User isn't existing, so it should also be created. But the "item" in received by Post is alway null. When I don't post a user or an empty users array, it works.

Here is my Model:

public class User
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public virtual Group Group { get; set; }
}

public class Group
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public virtual List<User> Users { get; set; }
}

And the Post Method:

// POST api/<controller>
[HttpPost]
[ProducesResponseType(typeof(Group), StatusCodes.Status200OK)]
public async Task<IActionResult> Post([FromBody] Group item)
{
    EntityEntry<Group> entityEntry = this._launcherContext.Database.Add(item);
    this._launcherContext.Database.SaveChanges();

    return Ok(entityEntry.Entity);
}

And at least the json body:

{
  "name": "TestGroup",
  "users": [
    {
      "name": "Threepwood, Guybrush"
    }
  ]
}
1
0
3/11/2020 11:48:17 AM

Popular Answer

If you want to create Group without User create a GroupPost class.

public class GroupPost
{
    public GroupPost(){
    Users = new List<UserPost>();
    }
    public string Name { get; set; }
    public List<UserPost> Users { get; set; }
}
public class UserPost
{
    public string Name { get; set; }

}    

[HttpPost]
[ProducesResponseType(typeof(Group), StatusCodes.Status200OK)]
public async Task<IActionResult> Post([FromBody] GroupPost item)
{
    Group newItem = new Group
    {
     Name=item.Name,         
    };
    foreach(var user in item.Users){
    User newUser = new User{
    Name=user.Name
    };
    newItem.Add(newUser);
    }
    EntityEntry<Group> entityEntry = this._launcherContext.Database.Add(newItem);
    this._launcherContext.Database.SaveChanges();

    return Ok(entityEntry.Entity);
}

Then you can post your data without User list

0
3/11/2020 12:17:46 PM


Related Questions





Related

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow