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

时间:2013-06-05 22:55:24

标签: c# .net entity-framework-5 one-to-many

我目前为我的实体框架设置了以下模型和数据库上下文。 关系如下:TableA和TableB都有多对多的关系。

的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();

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

当我这样做时会发生相同的行为

MyContext.TableB.GetList();

我是否正确设置了这个或者我是否缺少一些微妙的设置?

1 个答案:

答案 0 :(得分:1)

由于您已将ProxyCreationEnabled设置为false,因此可能会禁用延迟加载。您需要删除该行或急切加载相关信息。