我在将多个新对象添加到用户类(关系)中的集合中时遇到问题,一个用户可以有很多项目
但是由于某种原因,上下文无法将其正确保存在用户内部。
此代码的结果:
用户已添加到_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();
}
答案 0 :(得分:1)
您的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();
}