我想種子數據庫與用戶每個可以有列表。我如何在代碼中添加角色列表{1,2,3}(即向用戶添加「管理員」,「用戶」...的角色)(即,我使用SelectMany func):創建用戶和角色,而首先使用EF代碼種子數據庫
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));
}
}
因此,您不希望'foreach'遍歷用戶列表併爲每個用戶添加'User'和'Admin'角色,對吧? – renakre
那麼,在種子中,我創建了3個角色,並希望將其中的一些分配給某些用戶(即用戶具有角色列表);所以在將前三行種子角色置於上下文環境之後,我想添加(所有3個角色)給我創建的新用戶(實際上大多是關於在範圍中使用SelectMany func以及其他人們可以呈現的優雅解決方案的問題:) ) –
刪除了模板文本 –