我使用自定义MembershipProvider获得了MVC 3应用程序,因此它将新注册的用户存储到我的数据库中。 我正在使用现有数据库的Code First方法(我已经使用了实体框架电源工具)。得到表用户,角色和用户角色。 在表中用户我得到: 用户ID(PK) 用户名 密码 电子邮件 ...
在表格中,我得到了 RoleID(PK) 名称 描述
在表中的UsersRoles我得到了 UserID(设置为复合PK) RoleID(设置为复合PK)
public partial class User
{
public User()
{
this.Roles = new List<Role>();
}
public int UserID { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public string Email { get; set; }
public virtual ICollection<Role> Roles { get; set; }
}
public partial class Role
{
public Role()
{
this.Users = new List<User>();
}
public int RoleID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual ICollection<User> Users { get; set; }
}
public class UserMap : EntityTypeConfiguration<User>
{
public UserMap()
{
// Primary Key
this.HasKey(t => t.UserID);
// Properties
this.Property(t => t.Username)
.IsRequired()
.HasMaxLength(20);
this.Property(t => t.Password)
.IsRequired()
.HasMaxLength(50);
this.Property(t => t.Email)
.IsRequired()
.HasMaxLength(100);
// Table & Column Mappings
this.ToTable("Users");
this.Property(t => t.UserID).HasColumnName("UserID");
this.Property(t => t.Username).HasColumnName("Username");
this.Property(t => t.Password).HasColumnName("Password");
this.Property(t => t.Email).HasColumnName("Email");
}
}
public class RoleMap : EntityTypeConfiguration<Role>
{
public RoleMap()
{
// Primary Key
this.HasKey(t => t.RoleID);
// Properties
this.Property(t => t.Name)
.IsRequired()
.HasMaxLength(20);
this.Property(t => t.Description)
.HasMaxLength(50);
// Table & Column Mappings
this.ToTable("Roles");
this.Property(t => t.RoleID).HasColumnName("RoleID");
this.Property(t => t.Name).HasColumnName("Name");
this.Property(t => t.Description).HasColumnName("Description");
// Relationships
this.HasMany(t => t.Users)
.WithMany(t => t.Roles)
.Map(m =>
{
m.ToTable("UsersRoles");
m.MapLeftKey("RoleID");
m.MapRightKey("UserID");
});
}
}
我在Roles表中有预定义角色,我不希望在新用户注册时修改它们(Roles表只应由管理员修改),我希望新用户存储在Users表中并为其分配默认角色普通用户(没有特殊权限),因此它向Users表添加记录+ UsersRoles表中的记录。
public void AddUser(User user)
{
Users.Add(user);
SaveChanges();
}
var tmp = new User { Username = username, Password = GetMd5Hash(password), Email = email };
using (var db = new mycontext())
{
mycontext.AddUser(userObj);
}
但是我不知道如何让它向UsersRoles表添加新记录...具有UserID和RoleID(默认值为1,第一个是RoleID = 1 - 普通用户权限)。任何帮助将不胜感激。
答案 0 :(得分:0)
您只需从数据库中获取所需的角色即可
role.Users.Add(user);
SaveChanges();
EF将在联结表中创建一条新记录。请注意,此时必须加载Users
集合。
这样做,您甚至不需要语句Users.Add(user);
来保存用户。
同样,您可以将角色对象添加到user.Roles
。
如果要删除联结表中的记录,请从加载的 user.Roles
集合或role.Users
中的用户中删除角色。