我在用户类(关系(内的集合中添加新对象时遇到问题,一个用户可以有多个项目
但由于某些原因,上下文并没有将其正确保存在User中。
此代码的结果:
-
用户被添加到_context.UsersTable,并且可以从其他控制器读取
-
Item被添加到_context.ItemsTable(并且可以从其他控制器读取(,但User和Item之间没有连接。
-
用户处的项集合始终为空。
public class User { [Key] public Guid Id { get; set; } public virtual ICollection<Item> Items { get; set; } = new HashSet<Items>(); protected User() { } public User(string login, string password) { (...) } } public class Item { [Key] public virtual User User { get; set; } public string ItemName { get; set; } protected Item() { } public Item(string name, User user) { Id = new Guid(); this.User = user; ItemName = name; } } public class AppContext : DbContext { public AppContext(DbContextOptions<AppContext> options) : base(options) { Database.SetCommandTimeout(35000); } public DbSet<User> UsersTable { get; set; } public DbSet<Items> ItemsTable { get; set; } } public IActionResult register([FromBody]Register command) { var newUser = new User(command.login, password); var newItem = new Item("TEST", newUser); _context.Entry(newUser).State = EntityState.Modified; newUser.Items.Add(newItem); _context.UsersTable.Add(newUser); _context.ItemsTable.Add(newItem); _context.SaveChanges(); }
您的Item类是错误的,您需要这个:
public class Item
{
[Key]
public Guid Id { get; set; }
public string ItemName { get; set; }
// Relation to User
public Guid UserId { get; set; }
public virtual User User { get; set; }
protected Item()
{ }
public Item(string name, User user)
{
Id = Guid.NewGuid();
UserId = user.Id;
ItemName = name;
}
}
和注册方法:
public IActionResult register([FromBody]Register command)
{
var newUser = new User(command.login, password);
var newItem = new Item("TEST", newUser);
newUser.Items.Add(newItem);
_context.UsersTable.Add(newUser);
_context.ItemsTable.Add(newItem); // Edit : I'm not sure, but try it without this line, it should work
_context.SaveChanges();
}