繁体   English   中英

首先使用EF代码为DB播种时创建用户和角色

[英]Creating Users and Roles while seeding DB using EF code first

我正在尝试为每个都可以具有列表的用户播种数据库。 如何在代码中添加角色列表{1、2、3}(即向每个用户添加“ Admin”,“ User” ...的角色)(即在我使用SelectMany func的地方):

public class Role
{
    public Role(string roleName, int roleType)
    {
        this.RoleName = roleName;
        this.RoleType = roleType;

    }
    [Key]
    public int RoleId { get; set; }
    public string RoleName { get; set; }
    public int RoleType { get; set; }

}
public class User
{
    [Key]        
    public int UserId { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public virtual ICollection<Role> Roles { get; set; }

    public override string ToString()
    {
        return string.Format("[User UserId={0}, Name={1}, Age={2},    RolesCount={3}]", UserId, Name, Age, Roles.Count);
    }

}

public class UserContext : DbContext
{
    public DbSet<Role> Roles { get; set; }
    public DbSet<User> Users { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
      //            modelBuilder.Entity<User>().HasMany(u => u.Roles).WithMany(r => r.Users)
      //                .Map(m => m.MapLeftKey("UserId").MapRightKey("RoleId")
      //                     .ToTable("UserRole"));
        Database.SetInitializer(new ContextInitialiser()) ;
    }


}

public class ContextInitialiser: DropCreateDatabaseAlways<UserContext>
{
    protected override void Seed(UserContext context)
    {
        CreateRole("Admin", 1, context);
        CreateRole("SuperUser", 2, context);
        CreateRole("User", 3, context);
        CreateUser("Vovan Super", 31, context.Roles.SelectMany(r => r, (role, user) => new List<Role> (role) ));
        context.Users.ForEachAsync(  Console.WriteLine );
        base.Seed(context);         
    }

    private void CreateUser(string name, int age, List<Role> roles, UserContext ctx)
    {
        ctx.Users.Add(new User {Name = name, Age = age, Roles = roles }  );
    }
    private void CreateRole(string roleName, int roleType, UserContext ctx)
    {
        ctx.Roles.Add(new Role(roleName, roleType));
    }

}
var roles = new List<Role>()
{
new Role("Admin", 1),
new Role("SuperUser", 2),
new Role("User", 1)
};
ctx.Roles.AddRange(roles);
ctx.Users.Add(new User {Name = "Vovan Super", Age = 31, Roles = roles }  );
ctx.SaveChanges();

应该这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM