1

如何将相关对象添加到数据库?ASP.NET Core Identity用户关系

我IdentityUser:

public class ApplicationUser : IdentityUser 
{ 
    public ICollection<Todo> Todos { get; set; } 
} 

我的待办事项模式:

public class Todo 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public ApplicationUser User { get; set; } 
} 

我有一个类似的WebAPI/API /待办事项。

[HttpPost] 
public async Task<IActionResult> Post([FromBody]string name) 
{ 
    var user = await _userManager.GetUserAsync(User); 
    // _db is IdentityDbContext that I use 
    var newTodo = new Todo() { Name = "do the laundry" }; // Do I have to specify the user like User = user? 
    _db.Todos.Add(newTodo); 
    await _db.SaveChangesAsync(); 
    return CreatedAt(...); 
} 

问题:我做对了吗?我必须将用户传递给新的Todo项目吗?

我可以以某种方式加入这样的?:

user.Todos.Add(newTodo); 

但我将如何保存的待办事项?

+1

是的,你必须通过用户。您是否尝试添加用户并运行代码?乍看起来很好看。 –

+0

@AustinWinstanley你的意思是它看起来应该像'new Todo(){Name =“洗衣服”,User = user};'? – lll

+1

你可以做到这一点,或将其添加到用户待办事项列表,然后调用用户更新并保存更改。你有没有尝试过这些?那应该是你先做的。 –

回答

2

添加用户:

var user = await _userManager.GetUserAsync(User); 
var newTodo = new Todo() { Name = "do the laundry", User = user }; 
_db.Todos.Add(newTodo); 
await _db.SaveChangesAsync(); 

或添加到用户和更新:

var user = await _userManager.GetUserAsync(User); 
var newTodo = new Todo() { Name = "do the laundry" }; 
user.Todos.Add(newTodo); 
_db.Users.Update(user); 
await _db.SaveChangesAsync(); 

无论哪种方式应该罚款。

相关问题