![](/img/trans.png)
[英]How to seed the database with a many-to-many relationship in Entity Code First
[英]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.