簡體   English   中英

Code First Entity Framework中的Seed方法未填充多對多關系中的鏈接表

[英]The link table in Many-to-many relationship is not populated by the Seed method in Code First Entity Framework

我是剛接觸實體框架代碼的新手。 我正在嘗試在用戶和角色之間建立多對多關系。 鏈接表將為UserRole。 以下是我的代碼:

public class User
    {
        public int UserId { get; set; }

    [Required]
        [MaxLength(100)]

    public string Username { get; set; }

    [Required]
        [MaxLength(100)]

    public string Email { get; set; }

    public string HashedPassword { get; set; }

    public string Salt { get; set; }

    public bool IsLocked { get; set; }

    public DateTime DateCreated { get; set; }

        public virtual ICollection<Role> Roles { get; set; }

    }

public class Role
    {
        public int RoleId { get; set; }
        public string RoleName { get; set; }

        public virtual ICollection<User> Users { get; set; }
    }

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

protected override void Seed(LabRating.Data.LabRatingContext context)
    {
    context.UserSet.AddOrUpdate(u => u.Email, new User[]{

    new User()
            {
                Email = "abc.blog@gmail.com",

        Username = "abc123",

        HashedPassword = "XwAQoiq84p1RUzhAyPfaMDKVgSwnn80NCtsE8dNv3XI=",

        Salt = "mNKLRbEFCH8y1xIyTXP4qA==",

                IsLocked = false,

                DateCreated = DateTime.Now

    }
        });

    context.RoleSet.AddOrUpdate(new Role[] {
            new Role()
            {
                RoleName= "Admin"
             }
            });
}

如您所見,我先創建兩個表-User和Role-,然后在OnModelCreating方法中使用Fluent API建立多對多關系。 當我檢查數據庫時,我看到所有三個表-User,Role和UserRole-均已正確創建。 運行Seed方法時,只會使用上面顯示的數據填充User和Role表,而不會填充UserRole表。 請讓我知道如何解決此問題。

protected override void Seed(DatabaseContext context)
{
    Role role = new Role
    {
        RoleName = "Admin"
    };
    Role role2 = new Role
    {
        RoleName = "HR"
    };
    Role role3 = new Role
    {
        RoleName = "Marketing"
    };

    var roles= new List<Role> { role, role2,role3 };
    roles.ForEach(i => context.Roles.AddOrUpdate(i));
    context.SaveChanges();

    User user= new User
    { 
        Email = "abc.blog@gmail.com",
        Username = "abc123",
        HashedPassword = "XwAQoiq84p1RUzhAyPfaMDKVgSwnn80NCtsE8dNv3XI=",
        Salt = "mNKLRbEFCH8y1xIyTXP4qA==",
        IsLocked = false,
        DateCreated = DateTime.Now,
        Roles= new List<Role> { role,role2 }
    };

    User user2 = new User
    { 
        Email = "def.blog@gmail.com",
        Username = "def123",
        HashedPassword = "XwAQoiq84p1RUzhAyPfaMDKVgSwnn80NCtsE8dNv3XI=",
        Salt = "mNKLRbEFCH8y1xIyTXP4qA==",
        IsLocked = false,
        DateCreated = DateTime.Now,
        Roles= new List<Role> { role3 }
    };

    var users= new List<User> { user, user2};
    users.ForEach(a => context.Users.AddOrUpdate(a));
    context.SaveChanges();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM