这是我的班级: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);
我没有得到孩子们和孩子们的孩子......