簡體   English   中英

實體框架多對多,讀取不起作用

[英]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.

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