EF核心-增加的关系元素没有被EF保存



我在用户类(关系(内的集合中添加新对象时遇到问题,一个用户可以有多个项目

但由于某些原因,上下文并没有将其正确保存在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();
}

最新更新