我想用asp.net核心3.1构建一个项目,我想在身份用户和另一个表(Book)之间建立多到多的关系,我有两个表: AspNetUsers(ApplicationUser)和book:
public class ApplicationUser : IdentityUser // It's identity user
{
...
public ICollection<UserBooks> UserBooks { get; set; }
}
书籍:
public class Book
{
[Required]
public int Id { get; set; }
public string Name { get; set; }
public ICollection<UserBooks> UserBooks { get; set; }
}
关系的UserBooks:
public class UserBooks
{
public string UserId { get; set; }
public ApplicationUser User { get; set; }
public int BookId { get; set; }
public Book Book { get; set; }
}
现在,我想为db种子并创建init数据(用户和书籍):
用户:
图书:
有一些关于种子的主题,但我不知道如何为其他表和身份用户表提供多到多的关系。
我应该如何为用户、书籍和UserBooks ??播撒种子?
发布于 2020-04-21 09:37:03
首先,用所需的数据填充图书和用户。(如果您想要进行大量的测试,可以在插入后使用GO 25000,它将运行25000次),然后填充UserBooks。如果需要特定的关系,或者在both循环中随机获取图书和用户ids范围内两个字段的随机ids,则可以手动完成此操作。您还可以在脚本之后使用GO <>,它将多次运行它。
发布于 2020-04-22 08:42:44
我创建ApplicationDbInitializer类并从startup.cs调用它
ApplicationDbInitializer.Seed(userManager, roleManager, context);
ApplicationDbInitializer:
public static class ApplicationDbInitializer
{
public static void Seed(
UserManager<ApplicationUser> userManager,
RoleManager<IdentityRole> roleManager,
ApplicationDbContext context)
{
var roleName = "admin";
roleManager.CreateAsync(new IdentityRole
{
Name = roleName,
NormalizedName = roleName.ToUpper()
}).Wait();
if (userManager.FindByEmailAsync("b@b.com").Result == null)
{
var user = new ApplicationUser
{
UserName = "b@b.com",
Email = "b@b.com"
};
if (userManager.CreateAsync(user, "@Aa123456").Result.Succeeded)
userManager.AddToRoleAsync(user, roleName).Wait();
}
context.SaveChanges();
context.Books.AddRange(
new List<Book> {
new Book{ Name="B1" },
new Book{ Name="B2" },
});
context.SaveChanges();
var userIdOfB = context.Users.FirstOrDefault(u => u.Email == "b@b.com").Id;
var bookId1 = context.Books.FirstOrDefault(c => c.Name == "B1").Id;
var bookId2 = context.Books.FirstOrDefault(c => c.Name == "B2").Id;
context.UserBooks.AddRange(new List<UserBooks>
{
new UserBooks{ BookId = bookId1 , UserId = userIdOfB },
new UserBooks{ BookId = bookId2 , UserId = userIdOfB }
});
context.SaveChanges();
}
}
它工作正常,所有数据保存在使用关系创建的db和UserBooks表中,但是当我想获得UserBooks时,它是空的:
var res = _context.Users.FirstOrDefault(u => u.Email == "b@b.com").UserBooks;
,有人能帮我吗?为什么res是空的??
https://stackoverflow.com/questions/61340087
复制相似问题