实体框架5.0 -为多对多关系编写查询

本文关键字:关系 查询 框架 实体 | 更新日期: 2023-09-27 18:17:19

我目前有以下模型和数据库上下文设置为我的实体框架。表a和表b都是多对多关系

DBContext:

 public partial class MyContext : DbContext
    {
        public MyContext (string connString)
            : base(connString)
        {
            this.Configuration.ProxyCreationEnabled = false;
        }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
               modelBuilder.Entity<TableA>().HasMany(x => x.TableB).WithMany(
                x => x.TableA).Map(m =>
                {
                    m.ToTable("TableC");
                    m.MapRightKey("B_ID");
                    m.MapLeftKey("C_ID");
                });            
        }
        public DbSet<TableA> TableA { get; set; }
        public DbSet<TableB> TableB { get; set; }

    }

实体:

public partial class TableA
{
     public TableA()
     {
         this.TableB  = new List<TableB>();
     }
     [Key]
     public int A_ID { get; set; }
     public string A_Name { get; set; }
     public virtual ICollection<TableB> TableB { get; set; }
}

public partial class TableB
{
   public TableB()
   {
       this.TableA  = new List<TableA>();
   }
   [Key]
   public int B_ID { get; set; }
   public string B_Name { get; set; }
   public virtual ICollection<TableA> TableA { get; set; }
}

注意:因为表C是一个纯连接表,所以实体框架不需要为它创建实体。

当我运行以下命令时:

MyContext.TableA.GetList();

它根据需要返回Table A对象的列表,但是对于列表中的每个对象,它不包括实体定义中指示的TableB属性列表。

当我执行

时也会发生相同的行为
MyContext.TableB.GetList();

我设置正确还是我错过了一些微妙的设置?

实体框架5.0 -为多对多关系编写查询

延迟加载可能被禁用,因为您已将ProxyCreationEnabled设置为false。您要么需要删除该行,要么需要快速加载相关信息。