protected internal override Expression VisitEntity(EntityExpression ee) { if (previousTypes.Contains(ee.Type) || IsCached(ee.Type) || ee.AvoidExpandOnRetrieving) { ee = new EntityExpression(ee.Type, ee.ExternalId, null, null, null, null, null /*ee.SystemPeriod TODO*/, ee.AvoidExpandOnRetrieving); } else { ee = binder.Completed(ee); } previousTypes = previousTypes.Push(ee.Type); var bindings = VisitBindings(ee.Bindings !); var mixins = Visit(ee.Mixins, VisitMixinEntity); var id = (PrimaryKeyExpression)Visit(ee.ExternalId); var result = new EntityExpression(ee.Type, id, ee.ExternalPeriod, ee.TableAlias, bindings, mixins, ee.TablePeriod, ee.AvoidExpandOnRetrieving); previousTypes = previousTypes.Pop(); return(result); }