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(); 

無論哪種方式應該罰款。