/// <summary> Retrieves all related entities of type 'ContextEntity' using a relation of type 'm:n'.</summary>
 /// <param name="forceFetch">if true, it will discard any changes currently in the collection and will rerun the complete query instead</param>
 /// <param name="entityFactoryToUse">The entity factory to use for the GetMultiManyToMany() routine.</param>
 /// <returns>Filled collection with all related entities of the type constructed by the passed in entity factory</returns>
 public policyDB.CollectionClasses.ContextCollection GetMultiContextCollectionViaAttribute(bool forceFetch, IEntityFactory entityFactoryToUse)
 {
     if ((!_alreadyFetchedContextCollectionViaAttribute || forceFetch || _alwaysFetchContextCollectionViaAttribute) && !base.IsSerializing && !base.IsDeserializing && !base.InDesignMode)
     {
         if (base.ParticipatesInTransaction)
         {
             if (!_contextCollectionViaAttribute.ParticipatesInTransaction)
             {
                 base.Transaction.Add(_contextCollectionViaAttribute);
             }
         }
         IPredicateExpression filter = new PredicateExpression();
         filter.Add(new FieldCompareValuePredicate(AttributeTypeFields.Id, ComparisonOperator.Equal, this.Id, "AttributeTypeEntity__"));
         _contextCollectionViaAttribute.SuppressClearInGetMulti = !forceFetch;
         if (entityFactoryToUse != null)
         {
             _contextCollectionViaAttribute.EntityFactoryToUse = entityFactoryToUse;
         }
         _contextCollectionViaAttribute.GetMulti(filter, GetRelationsForField("ContextCollectionViaAttribute"));
         _contextCollectionViaAttribute.SuppressClearInGetMulti = false;
         _alreadyFetchedContextCollectionViaAttribute           = true;
     }
     return(_contextCollectionViaAttribute);
 }