1

関連オブジェクトをデータベースに追加するにはどうすればよいですか?ASP.NET Core IdentityUserの関係

マイ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; } 
} 

私は/ API /ドスのようなWebAPIのを持っています。

[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アイテムにユーザーを渡す必要がありますか?

私は何とかそのようTODOを追加することができます?:

user.Todos.Add(newTodo); 

しかし、どのように私はそれを保存しますか?

+1

はい、ユーザーを渡す必要があります。ユーザーを追加してコードを実行しようとしましたか?一見するとうまく見えます。 –

+0

@AustinWinstanleyあなたはそれが '新しいTodo(){名前="洗濯する "、ユーザー=ユーザー}のように見えることを意味しますか? – lll

+1

これを実行するか、User Todoリストに追加して、ユーザーの更新を呼び出して変更を保存できます。あなたはまだこれらを試しましたか?それはあなたがまずやるべきことです。 –

答えて

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

は問題ないはずです。