我有(2)个实体,它们如下:
[Table("User")]
public class User
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
[Required]
[MaxLength(20)]
public string Name { get; set; }
public ICollection<Role> Roles { get; set; }
public User()
{
this.Roles = new Collection<Role>();
}
}
[Table("User")]
public class Role
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int RoleId{ get; set; }
[Required]
[MaxLength(20)]
public string Name { get; set; }
public ICollection<User> Users { get; set; }
public Role()
{
this.Users = new Collection<User>();
}
}
这将在我的数据库中创建三个表,用户、角色和用户角色。
我正在利用通用存储库,我的添加和更新如下所示:
public virtual void Add(TEntity entity)
{
_dbSet.Add(entity);
}
public virtual void Update(TEntity entity)
{
_dbSet.Attach(entity);
_dbContext.Entry(entity).State = EntityState.Modified;
}
如果我想添加一个具有角色的新用户,我必须在继承自我的通用存储库的 UserRepository 中执行以下操作。
public override void Add(User entity)
{
foreach (var role in entity.Roles)
_dbContext.Roles.Attach(role);
base.Add(entity);
}
这看起来很笨拙,但它确实有效。
我现在的麻烦是当我想更新用户时,比如添加一个新角色。我以为我可以做类似的事情。
public override void Update(User entity)
{
foreach (var role in entity.Roles)
_dbContext.Roles.Attach(role);
base.Update(entity);
}
但这不起作用......任何关于我做错了什么的想法都将不胜感激!
更新
我的用例是我有一个具有 X 个角色的现有用户,我添加了 Y 个角色,我想用 Y 个新角色更新用户。