同一个表上的EntityFramework Parent Child加载速度很慢

时间:2016-05-20 11:43:29

标签: c# entity-framework

这是我的班级:TimePart。

    public class TimePart : IEntity, IComposite<TimePart>
    {
    [Key()]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long Id { get; set; }
    public long? ParentId { get; set; }
    public virtual TimePart Parent { get; set; }
    public virtual List<TimePart> Children { get; set; }
    .......+some other properties
    public TimePart()
    {
        Children = new List<TimePart>();

    }

    public virtual TimePart Root
    {
        get
        {
            if (Parent == null)
                return this;
            TimePart root = Parent;
            int levels = 0;
            while (root.Parent != null && levels < 50)
            {
                root = root.Parent;
                levels++;
            }
            return root;
        }
    }
}

这是我的dbContext

 public class DbContextFlex : DbContext, IDisposable
{
    public DbContextFlex(string connectionString)
        : base(connectionString)
    {
        ((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 300;
        Configuration.ProxyCreationEnabled = false;
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<TimePart>().HasOptional(m => m.Parent)
           .WithMany(m => m.Children)
           .HasForeignKey(m => m.ParentId);

    }

    public DbSet<TimePart> Timeparts { get; set; }
    .....with other dbsets.....

这是我的问题。以下一行需要大约26秒才能加载90行,那里有孩子们和孩子们的孩子......

   var tp = Helpers.DbContext.Timeparts.ToList().Single(t => t.Id == simpleTp.Id);

如果我删除ToList并更改我的代码,如:

   var tp = Helpers.DbContext.Timeparts.Single(t => t.Id == simpleTp.Id);

我没有得到孩子们和孩子们的孩子......

0 个答案:

没有答案