首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在asp.net核心3中创建和播种多到多的关系

在asp.net核心3中创建和播种多到多的关系
EN

Stack Overflow用户
提问于 2020-04-21 09:22:39
回答 2查看 162关注 0票数 0

我想用asp.net核心3.1构建一个项目,我想在身份用户和另一个表(Book)之间建立多到多的关系,我有两个表: AspNetUsers(ApplicationUser)和book:

代码语言:javascript
代码运行次数:0
运行
复制
public class ApplicationUser : IdentityUser // It's identity user
{
    ...

    public ICollection<UserBooks> UserBooks { get; set; }
}

书籍:

代码语言:javascript
代码运行次数:0
运行
复制
public class Book
{
    [Required]
    public int Id { get; set; }

    public string Name { get; set; }

    public ICollection<UserBooks> UserBooks { get; set; }
}

关系的UserBooks:

代码语言:javascript
代码运行次数:0
运行
复制
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数据(用户和书籍):

用户:

  • 电子邮件: user1@test.com >这个用户应该有2本书
  • 电子邮件: user2@test.com >这个用户应该有书1

图书:

  • Id : 1,名称:"B1“>这本书应该有2个用户
  • Id: 2,名称:"B2”>这本书应该有用户1

有一些关于种子的主题,但我不知道如何为其他表和身份用户表提供多到多的关系。

我应该如何为用户、书籍和UserBooks ??播撒种子?

EN

回答 2

Stack Overflow用户

发布于 2020-04-21 09:37:03

首先,用所需的数据填充图书和用户。(如果您想要进行大量的测试,可以在插入后使用GO 25000,它将运行25000次),然后填充UserBooks。如果需要特定的关系,或者在both循环中随机获取图书和用户ids范围内两个字段的随机ids,则可以手动完成此操作。您还可以在脚本之后使用GO <>,它将多次运行它。

票数 0
EN

Stack Overflow用户

发布于 2020-04-22 08:42:44

我创建ApplicationDbInitializer类并从startup.cs调用它

代码语言:javascript
代码运行次数:0
运行
复制
ApplicationDbInitializer.Seed(userManager, roleManager, context);

ApplicationDbInitializer:

代码语言:javascript
代码运行次数:0
运行
复制
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时,它是空的:

代码语言:javascript
代码运行次数:0
运行
复制
var res = _context.Users.FirstOrDefault(u => u.Email == "b@b.com").UserBooks;

,有人能帮我吗?为什么res是空的??

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61340087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档