private void EnsureRelatedPreloaded()
        {
            if (preloaded)
            {
                return;
            }

            EnsureLoaded();
            preloaded = true;

            var ids = relations
                      .Select((inter) => reverse ? inter.FromId : inter.ToId)
                      .Where((v) => v.HasValue)
                      .ToList();

            Model.Query <TRelated> ((m) => ids.Contains(m.Id));
        }
        private void EnsureLoaded()
        {
            if (relations != null)
            {
                return;
            }

            relations = new List <TInter> ();
            var cachedInters = Model.Manager.Cached <TInter> ().Where(InterLookupFunc);
            var dbInters     = Model.Query <TInter> (InterLookupQuery);
            var inters       = cachedInters.Union(dbInters).Where(IsOurInter);

            foreach (var inter in inters)
            {
                AddRelation(inter);
            }

            var bus = ServiceContainer.Resolve <MessageBus> ();

            subscriptionModelChanged = bus.Subscribe <ModelChangedMessage> (OnModelChanged);
        }