简体   繁体   中英

Create nested data from JSON using .net core Entity Framework

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"
    }
  ]
}

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM