[英]Entity framework many to many, reading does not work
我在用戶和他們的角色之間創建了多對多的關系。 每當我將角色添加到用戶時,如果之前沒有插入用戶和角色(相同的鍵),它就可以正常工作,但我無法讀取中間表。 如果我搜索用戶或角色的連接,結果始終為 0。
我怎樣才能解決這個問題?
public User()
{
Roles = new HashSet<Role>();
}
public virtual ICollection<Role> Roles { get; set; }
public Role()
{
Users = new HashSet<User>();
}
public virtual ICollection<User> Users { get; set; }
SomeDbContext :
public virtual DbSet<User> Users { get; set; } = null!;
public virtual DbSet<Role> Roles { get; set; } = null!;
modelBuilder.Entity<User>(entity =>
{
entity.ToTable("users");
entity.HasIndex(e => e.id, "users$UNIQ_34634663476347")
.IsUnique();
entity.HasIndex(e => new { e.CrmId, e.CrmResident }, "users$crm_unique")
.IsUnique();
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.CrmId)
.HasColumnType("numeric(20, 0)")
.HasColumnName("crm_id");
entity.HasMany(d => d.Roles)
.WithMany(p => p.Users)
.UsingEntity<Dictionary<string, object>>("UserRole",l => l.HasOne<Role>()
.WithMany().HasForeignKey("RoleId").OnDelete(DeleteBehavior.ClientSetNull).HasConstraintName("user_role$FK_2DE8C6A3D60322AC"),r => r.HasOne<User>()
.WithMany().HasForeignKey("UserId").HasConstraintName("user_role$FK_2DE8C6A3A76ED395"),
j =>
{
j.HasKey("UserId", "RoleId").HasName("PK_user_role_user_id");
j.ToTable("user_role");
j.HasIndex(new[] { "UserId" }, "IDX_2DE8C6A3A76ED395");
j.HasIndex(new[] { "RoleId" }, "IDX_2DE8C6A3D60322AC");
j.IndexerProperty<int>("UserId").HasColumnName("user_id");
j.IndexerProperty<int>("RoleId").HasColumnName("role_id");
});
}
我正在嘗試使用以下方式訪問數據:
user = SomeDbContext.Users.FirstOrDefault(a => a.CrmId == userData.CrmId);
user.Roles.Count(); // always 0
var MatchingRole = SomeDbContext.Roles.FirstOrDefault(role => role.Role1 == "someRole1");
MatchingRole.Users.Count() // always 0
// Adding
MatchingRole.Users.Add(user); // or
//user.Roles.Add(MatchingRole);
SomeDbContext.SaveChanges();
像這樣的東西:
var user = SomeDbContext.Users.Include(x => x.Roles).FirstOrDefault(x => x.CrmId == userData.CrmId);
var rolesCount = user.Roles.Count();
var matchingRole = SomeDbContext.Roles.Include(x => x.Users).FirstOrDefault(role => role.Role1 == "someRole1");
var usersCount = matchingRole.Users.Count()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.