示例#1
0
        public void Test_CreatedBusinessObject_SaveBO()
        {
            //Saving a created business object should remove the business
            // object from the created col. it should still exist in
            // the main collection and should be added to the persisted collection
            //---------------Set up test pack-------------------
            OrganisationTestBO    organisationTestBO = OrganisationTestBO.CreateSavedOrganisation();
            IMultipleRelationship cpRelationship     =
                (IMultipleRelationship)organisationTestBO.Relationships["ContactPeople"];
            RelatedBusinessObjectCollection <ContactPersonTestBO> cpCol =
                new RelatedBusinessObjectCollection <ContactPersonTestBO>(cpRelationship);

            cpCol.LoadAll();

            ContactPersonTestBO newCP = cpCol.CreateBusinessObject();

            newCP.Surname   = TestUtil.GetRandomString();
            newCP.FirstName = TestUtil.GetRandomString();
            RegisterForAddedEvent(cpCol);

            //---------------Assert Preconditions --------------
            Assert.IsFalse(_addedEventFired);
            AssertOneObjectInCurrentAndCreatedCollection(cpCol);

            //---------------Execute Test ----------------------
            newCP.Save();

            //---------------Test Result -----------------------
            Assert.IsFalse(_addedEventFired);
            Assert.Contains(newCP, cpCol);
            AssertOneObjectInCurrentAndPersistedCollection(cpCol);
        }
示例#2
0
        /// <summary>
        /// Returns a collection of business objects that are connected to
        /// this object through the specified relationship (eg. would return
        /// a father and a mother if the relationship was "parents").  This
        /// method is to be used in the case of multiple relationships.
        /// </summary>
        /// <param name="relationshipName">The name of the relationship</param>
        /// <returns>Returns a business object collection</returns>
        /// <exception cref="InvalidRelationshipAccessException">Thrown if
        /// the relationship specified is a single relationship, when a
        /// multiple one was expected</exception>
        public virtual IBusinessObjectCollection GetRelatedCollection(string relationshipName)
        {
            ArgumentValidationHelper.CheckStringArgumentNotEmpty(relationshipName, "relationshipName");
            IMultipleRelationship multipleRelationship = GetMultiple(relationshipName);

            return(multipleRelationship.BusinessObjectCollection);
        }
示例#3
0
        ///<summary>
        /// Returns a multiple relationship for with the specified relationship name.
        ///</summary>
        ///<param name="relationshipName">The specified relationship name</param>
        ///<returns>The multiple relationship</returns>
        public IMultipleRelationship GetMultiple(string relationshipName)
        {
            ArgumentValidationHelper.CheckStringArgumentNotEmpty(relationshipName, "relationshipName");
            IMultipleRelationship relationship = GetRelationshipAsMultiple(relationshipName);

            return(relationship);
        }
示例#4
0
        public void Test_CreateBusinessObject()
        {
            //---------------Set up test pack-------------------
            OrganisationTestBO    organisationTestBO = OrganisationTestBO.CreateSavedOrganisation();
            IMultipleRelationship cpRelationship     =
                (IMultipleRelationship)organisationTestBO.Relationships["ContactPeople"];
            RelatedBusinessObjectCollection <ContactPersonTestBO> cpCol =
                new RelatedBusinessObjectCollection <ContactPersonTestBO>(cpRelationship);

            cpCol.LoadAll();
            RegisterForAddedEvent(cpCol);

            //---------------Assert Precondition----------------
            Assert.AreEqual(0, cpCol.Count);
            Assert.IsFalse(_addedEventFired);
            Assert.AreEqual(0, cpCol.PersistedBusinessObjects.Count);

            //---------------Execute Test ----------------------
            ContactPersonTestBO newCP = cpCol.CreateBusinessObject();

            //---------------Test Result -----------------------
            AssertOneObjectInCurrentAndCreatedCollection(cpCol);

            Assert.Contains(newCP, cpCol.CreatedBusinessObjects);
            Assert.Contains(newCP, cpCol);
            Assert.IsFalse(cpCol.PersistedBusinessObjects.Contains(newCP));
            Assert.IsTrue(_addedEventFired);
        }
        public void TestColIsInstantiatedButNotLoaded()
        {
            //---------------Set up test pack-------------------
            ClassDef.ClassDefs.Clear();
            OrganisationTestBO.LoadDefaultClassDef();
            IClassDef contactPersonClassDef = ContactPersonTestBO.LoadClassDefOrganisationTestBORelationship_MultipleReverse();
            RelKeyDef keyDef = new RelKeyDef();

            keyDef.Add(new RelPropDef(contactPersonClassDef.PropDefcol["OrganisationID"], "OrganisationID"));
            MultipleRelationshipDef def = new MultipleRelationshipDef
                                              (TestUtil.GetRandomString(), typeof(ContactPersonTestBO),
                                              keyDef, false, "", DeleteParentAction.DoNothing);

            OrganisationTestBO organisation = new OrganisationTestBO();
            //---------------Assert Precondition----------------

            //---------------Execute Test ----------------------
            IMultipleRelationship rel = (IMultipleRelationship)def.CreateRelationship(organisation, organisation.Props);

            //---------------Test Result -----------------------

            IBusinessObjectCollection collection = rel.BusinessObjectCollection;

            Assert.IsNotNull(collection);
            Assert.AreEqual(0, collection.Count);
            Assert.AreSame(contactPersonClassDef, collection.ClassDef);
            Assert.IsNotNull(collection.SelectQuery.Criteria);
            Assert.IsNotNull(collection.SelectQuery.Criteria.Field);
            Assert.AreEqual("OrganisationID", collection.SelectQuery.Criteria.Field.PropertyName);
            Assert.IsNotNull(collection.SelectQuery.Criteria.Field.Source);
            Assert.AreEqual("ContactPersonTestBO", collection.SelectQuery.Criteria.Field.Source.Name);
            Assert.AreEqual(organisation.OrganisationID.Value, collection.SelectQuery.Criteria.FieldValue);
            Assert.IsInstanceOf(typeof(ContactPersonTestBO), collection.CreateBusinessObject());
        }
示例#6
0
        ///<summary>
        /// Returns a strongly typed multiple relationship for with the specified relationship name.
        ///</summary>
        ///<param name="relationshipName">The specified relationship name</param>
        ///<returns>The multiple relationship</returns>
        public MultipleRelationship <T> GetMultiple <T>(string relationshipName)
            where T : BusinessObject, new()
        {
            ArgumentValidationHelper.CheckStringArgumentNotEmpty(relationshipName, "relationshipName");
            IMultipleRelationship relationship = GetRelationshipAsMultiple(relationshipName);

            return((MultipleRelationship <T>)relationship);
        }
示例#7
0
        private static RelatedBusinessObjectCollection <ContactPersonTestBO> CreateRelatedCPCol()
        {
            OrganisationTestBO    organisationTestBO = OrganisationTestBO.CreateSavedOrganisation();
            IMultipleRelationship cpRelationship     =
                (IMultipleRelationship)organisationTestBO.Relationships["ContactPeople"];

            return(new RelatedBusinessObjectCollection <ContactPersonTestBO>(cpRelationship));
        }
示例#8
0
 public static string[] ToRelationPNRsOrNull(this IMultipleRelationship rel)
 {
     if (rel != null && rel.RelationPNRs != null)
     {
         return(rel.RelationPNRs.Select(pnr => Converters.ToPnrStringOrNull(pnr)).ToArray());
     }
     return(null);
 }
        /// <summary>
        /// Update the Underlying relationship collection e.g. The added or removed Business Object Collections are updated.
        /// </summary>
        protected override void UpdateCollections()
        {
//            RelationshipBase relationshipBase = (RelationshipBase)Relationship;
            IMultipleRelationship relationship = Relationship as IMultipleRelationship;

            if (relationship != null)
            {
                relationship.BusinessObjectCollection.AddedBusinessObjects.Remove(this.RelatedBO);
            }
        }
示例#10
0
        public void TestCreateRelationship()
        {
            IMultipleRelationship rel =
                (IMultipleRelationship)_multipleRelationshipDef.CreateRelationship(_fakeBO, _fakeBO.PropCol);

            Assert.AreEqual(_multipleRelationshipDef.RelationshipName, rel.RelationshipName);

            Assert.IsTrue(_fakeBO.GetPropertyValue("MockBOProp1") == null);

            Assert.AreEqual(0, rel.BusinessObjectCollection.Count);
        }
        /// <summary>
        /// Update the Underlying relationship collection e.g. The added or removed Business Object Collections are updated.
        /// </summary>
        protected override void UpdateCollections()
        {
//            SingleRelationshipBase relationshipBase = (SingleRelationshipBase)Relationship;
            IMultipleRelationship relationship = Relationship as IMultipleRelationship;

            if (relationship != null)
            {
                IBusinessObjectCollection businessObjectCollection = relationship.BusinessObjectCollection;
                businessObjectCollection.RemovedBusinessObjects.Remove(this.RelatedBO);
                businessObjectCollection.PersistedBusinessObjects.Remove(this.RelatedBO);
            }
        }
示例#12
0
        private static RelatedBusinessObjectCollection <ContactPersonTestBO> CreateCollectionWith_OneBO()
        {
            OrganisationTestBO    organisationTestBO = OrganisationTestBO.CreateSavedOrganisation();
            IMultipleRelationship cpRelationship     =
                (IMultipleRelationship)organisationTestBO.Relationships["ContactPeople"];
            RelatedBusinessObjectCollection <ContactPersonTestBO> cpCol =
                new RelatedBusinessObjectCollection <ContactPersonTestBO>(cpRelationship);

            ContactPersonTestBO cp = cpCol.CreateBusinessObject();

            cp.FirstName = TestUtil.GetRandomString();
            cp.Surname   = TestUtil.GetRandomString();
            cp.Save();
            return(BORegistry.DataAccessor.BusinessObjectLoader.GetRelatedBusinessObjectCollection <ContactPersonTestBO>
                       (cpRelationship));
        }
示例#13
0
        public void Test_LoadBoCol()
        {
            //---------------Set up test pack-------------------
            OrganisationTestBO organisationTestBO = OrganisationTestBO.CreateSavedOrganisation();

            CreateSavedContactPerson(organisationTestBO);
            //---------------Assert Precondition----------------

            //---------------Execute Test ----------------------

            IMultipleRelationship     cpRelationship = (IMultipleRelationship)organisationTestBO.Relationships["ContactPeople"];
            IBusinessObjectCollection cpCol          = BORegistry.DataAccessor.BusinessObjectLoader.GetRelatedBusinessObjectCollection(typeof(ContactPersonTestBO), cpRelationship);

            //---------------Test Result -----------------------
            AssertOneObjectInCurrentAndPersistedCollection(cpCol);
        }
示例#14
0
        /// <summary>
        /// Sets the Value of the <see cref="IMultipleRelationship"/> to a list of values as configured using the WithMany.
        /// </summary>
        /// <param name="multipleRelationship"></param>
        private void SetRelationshipToValidValue(IMultipleRelationship multipleRelationship)
        {
            if (!_defaultValueRegistry.IsRegistered(multipleRelationship.RelationshipName))
            {
                return;
            }
            IList lists = (IList)_defaultValueRegistry.Resolve(multipleRelationship.RelationshipName);

            if (lists == null)
            {
                return;
            }
            foreach (var item in lists)
            {
                multipleRelationship.BusinessObjectCollection.Add(item);
            }
        }
        public void Test_SetSingleReverseRelationship_WhenMultipleReverseRelationshipNotLoaded_ShouldUpdateRelatedBOCol()
        {
            //---------------Set up test pack-------------------
            OrganisationTestBO    organisationTestBO = OrganisationTestBO.CreateSavedOrganisation();
            OrganisationTestBO    organisation       = OrganisationTestBO.CreateSavedOrganisation();
            IMultipleRelationship relationship       = (IMultipleRelationship)organisationTestBO.Relationships["ContactPeople"];
            ContactPersonTestBO   contactPerson      = organisation.ContactPeople.CreateBusinessObject();

            //---------------Assert Precondition----------------
            //Assert.IsNull(contactPerson.Organisation);
            //---------------Execute Test ----------------------
            contactPerson.Organisation = organisationTestBO;

            //---------------Test Result -----------------------
            Assert.AreEqual(1, relationship.BusinessObjectCollection.Count);
            Assert.AreEqual(1, relationship.BusinessObjectCollection.CreatedBusinessObjects.Count);
        }
示例#16
0
        public void TestGetMultiple()
        {
            //---------------Set up test pack-------------------
            IClassDef classDef = MyBO.LoadClassDefWithRelationship();

            MyRelatedBo.LoadClassDef();
            MyBO   bo1 = (MyBO)classDef.CreateNewBusinessObject();
            string relationshipName = "MyMultipleRelationship";

            //---------------Execute Test ----------------------
            IMultipleRelationship relationship = bo1.Relationships.GetMultiple(relationshipName);

            //---------------Test Result -----------------------

            Assert.IsNotNull(relationship);
            Assert.AreEqual(relationshipName, relationship.RelationshipName);
        }
示例#17
0
        public void Test_CreateBusinessObject_OnlyFiresOneAddedEvent()
        {
            //---------------Set up test pack-------------------
            ClassDef.ClassDefs.Clear();
            MyBO.LoadClassDefWithRelationship();
            MyRelatedBo.LoadClassDef();
            MyBO bo = new MyBO();
            IMultipleRelationship rel = bo.Relationships.GetMultiple("MyMultipleRelationship");
            RelatedBusinessObjectCollection <MyRelatedBo> col = (RelatedBusinessObjectCollection <MyRelatedBo>)rel.BusinessObjectCollection;
            int addedEventCount = 0;

            col.BusinessObjectAdded += (sender, e) => addedEventCount++;
            //---------------Assert Precondition----------------
            Assert.AreEqual(0, addedEventCount);
            //---------------Execute Test ----------------------
            col.CreateBusinessObject();
            //---------------Test Result -----------------------
            Assert.AreEqual(1, addedEventCount);
        }
示例#18
0
        public void TestGetMultiple_Fail()
        {
            //---------------Set up test pack-------------------
            IClassDef classDef = MyBO.LoadClassDefWithRelationship();

            MyRelatedBo.LoadClassDef();
            MyBO   bo1 = (MyBO)classDef.CreateNewBusinessObject();
            string relationshipName = "MyRelationship";

            //---------------Execute Test ----------------------
            try
            {
                IMultipleRelationship relationship = bo1.Relationships.GetMultiple(relationshipName);
                Assert.Fail("Should have failed because we're accessing a single relationship as a multiple.");
                //---------------Test Result -----------------------
            }
            catch (InvalidRelationshipAccessException)
            {
            }
        }
示例#19
0
        public void Test_CreateBusinessObject_AddedToTheCollection()
        {
            //---------------Set up test pack-------------------
            ClassDef.ClassDefs.Clear();
            MyBO.LoadClassDefWithRelationship();
            MyRelatedBo.LoadClassDef();
            MyBO bo = new MyBO();
            IMultipleRelationship rel = bo.Relationships.GetMultiple("MyMultipleRelationship");
            RelatedBusinessObjectCollection <MyRelatedBo> col = new RelatedBusinessObjectCollection <MyRelatedBo>(rel);
            //---------------Assert Precondition----------------

            //---------------Execute Test ----------------------
            MyRelatedBo relatedBo = col.CreateBusinessObject();

            //---------------Test Result -----------------------
            Assert.AreEqual(bo.MyBoID, relatedBo.MyBoID, "The foreign key should eb set");
            Assert.IsTrue(relatedBo.Status.IsNew);
            Assert.AreEqual(1, col.CreatedBusinessObjects.Count, "The created BOs should be added");
            Assert.AreEqual(0, col.AddedBusinessObjects.Count);
            Assert.AreEqual(1, col.Count);
        }
 private void LoadRelationshipNode(IRelationship relationship, ITreeNodeCollection nodes)
 {
     if (relationship is IMultipleRelationship)
     {
         IMultipleRelationship     multipleRelationship = (IMultipleRelationship)relationship;
         IBusinessObjectCollection children             = multipleRelationship.BusinessObjectCollection;
         foreach (IBusinessObject businessObject in children.Clone())
         {
             AddBusinessObjectNode(nodes, businessObject);
         }
     }
     else
     {
         ISingleRelationship singleRelationship = (ISingleRelationship)relationship;
         IBusinessObject     businessObject     = singleRelationship.GetRelatedObject();
         if (businessObject != null)
         {
             AddBusinessObjectNode(nodes, businessObject);
         }
     }
 }
示例#21
0
        internal static void SetupCriteriaForRelationship(IMultipleRelationship relationship, IBusinessObjectCollection collection)
        {
            Criteria       relationshipCriteria = Criteria.FromRelationship(relationship);
            IOrderCriteria preparedOrderCriteria;
            var            orderCriteriaString = relationship.OrderCriteria.ToString();

            try
            {
                preparedOrderCriteria =
                    QueryBuilder.CreateOrderCriteria(relationship.RelatedObjectClassDef, orderCriteriaString);
            }
            catch (InvalidOrderCriteriaException)
            {
                throw new InvalidOrderCriteriaException("The Relationship '" + relationship.RelationshipName
                                                        + "' on the ClassDef '" + relationship.OwningBO.ClassDef.ClassNameFull
                                                        + "' has an Invalid OrderCriteria '" + orderCriteriaString);
            }

            //QueryBuilder.PrepareCriteria(relationship.RelatedObjectClassDef, relationshipCriteria);
            collection.SelectQuery.Criteria      = relationshipCriteria;
            collection.SelectQuery.OrderCriteria = preparedOrderCriteria;
        }
示例#22
0
        public void Test_LoadRelatedBoCol()
        {
            //---------------Set up test pack-------------------
            OrganisationTestBO    organisationTestBO = OrganisationTestBO.CreateSavedOrganisation();
            IMultipleRelationship cpRelationship     =
                (IMultipleRelationship)organisationTestBO.Relationships["ContactPeople"];
            ContactPersonTestBO cp =
                (ContactPersonTestBO)cpRelationship.BusinessObjectCollection.CreateBusinessObject();

            cp.FirstName = TestUtil.GetRandomString();
            cp.Surname   = TestUtil.GetRandomString();
            cp.Save();
            //---------------Assert Precondition----------------

            //---------------Execute Test ----------------------
            IBusinessObjectCollection cpCol =
                BORegistry.DataAccessor.BusinessObjectLoader.GetRelatedBusinessObjectCollection
                    (typeof(ContactPersonTestBO), cpRelationship);

            //---------------Test Result -----------------------
            AssertOneObjectInCurrentAndPersistedCollection(cpCol);
        }
        private void SetupRelationshipNodeDummy(IRelationship relationship, NodeState nodeState)
        {
            int childCount = 0;

            if (relationship is IMultipleRelationship)
            {
                IMultipleRelationship     multipleRelationship     = (IMultipleRelationship)relationship;
                IBusinessObjectCollection businessObjectCollection = multipleRelationship.BusinessObjectCollection;
                ChildCollectionNodes.Add(businessObjectCollection, nodeState);
                RegisterForBusinessObjectCollectionEvents(businessObjectCollection);
                childCount = businessObjectCollection.Count;
            }
            else
            {
                //TODO: Do something decent with Single Relationship Updated Event
                ISingleRelationship singleRelationship = (ISingleRelationship)relationship;
                if (singleRelationship.HasRelatedObject())
                {
                    childCount = 1;
                }
            }
            UpdateNodeDummy(nodeState, childCount);
        }
 private void RemoveRelationshipNode(IRelationship relationship)
 {
     this.RelationshipNodes.Remove(relationship);
     if (relationship is IMultipleRelationship)
     {
         IMultipleRelationship     multipleRelationship = (IMultipleRelationship)relationship;
         IBusinessObjectCollection children             = multipleRelationship.BusinessObjectCollection;
         ChildCollectionNodes.Remove(children);
         foreach (IBusinessObject businessObject in children.Clone())
         {
             RemoveBusinessObjectNode(businessObject);
         }
     }
     else
     {
         ISingleRelationship singleRelationship = (ISingleRelationship)relationship;
         IBusinessObject     businessObject     = singleRelationship.GetRelatedObject();
         if (businessObject != null)
         {
             RemoveBusinessObjectNode(businessObject);
         }
     }
 }
示例#25
0
        private void AddChildIfNeeded(string childName, RelationshipCol relationshipCol)
        {
            IRelationshipDefCol relationshipDefCol = ClassDef.RelationshipDefCol;

            if (relationshipDefCol.Contains(childName))
            {
                IRelationshipDef relationshipDef = relationshipDefCol[childName];
#pragma warning disable 168
                IClassDef classDef = relationshipDef.RelatedObjectClassDef;
#pragma warning restore 168
                IMultipleRelationship relationship = (IMultipleRelationship)relationshipDef.CreateRelationship(this, this._boPropCol);
                //_mock.DynamicMock<IMultipleRelationship>();
                //(this, relationshipDef, this._boPropCol);
                //BusinessObjectCollection<BusinessObject> businessObjectCollection = new BusinessObjectCollection<BusinessObject>(classDef);
                //SetupResult.For(relationship.BusinessObjectCollection)
                //    .Return(businessObjectCollection);
                //SetupResult.For(relationship.RelationshipName)
                //    .Return(businessObjectCollection);

                //SetupResult.For(relationship.GetRelatedBusinessObjectCol<BusinessObject>())
                //    .Return(businessObjectCollection);
                relationshipCol.Add(relationship);
            }
        }
示例#26
0
		/// <summary>
		/// Creates a <see cref="RelatedBusinessObjectCollection{TBusinessObject}"/> with boType as its type parameter, using the Activator.
		/// </summary>
		/// <param name="boType">The type parameter to be used</param>
		/// <param name="relationship">The relationship that this <see cref="RelatedBusinessObjectCollection{TBusinessObject}"/> is the collection for</param>
		/// <returns>The instantiated <see cref="RelatedBusinessObjectCollection{TBusinessObject}"/></returns>
		public static IBusinessObjectCollection CreateRelatedBusinessObjectCollection(Type boType, IMultipleRelationship relationship)
		{
			IBusinessObjectCollection collection = CreateNewRelatedBusinessObjectCollection(boType, relationship);
			SetupCriteriaForRelationship(relationship, collection);
			return collection;
		}
示例#27
0
 /// <summary>
 /// Loads a RelatedBusinessObjectCollection using the Relationship given.  This method is used by relationships to load based on the
 /// fields defined in the relationship.
 /// </summary>
 /// <typeparam name="T">The type of collection to load. This must be a class that implements IBusinessObject and has a parameterless constructor</typeparam>
 /// <param name="relationship">The relationship that defines the criteria that must be loaded.  For example, a Person might have
 /// a Relationship called Addresses, which defines the PersonID property as the relationship property. In this case, calling this method
 /// with the Addresses relationship will load a collection of Address where PersonID = '?', where the ? is the value of the owning Person's
 /// PersonID</param>
 /// <returns>The loaded RelatedBusinessObjectCollection</returns>
 public static RelatedBusinessObjectCollection <T> GetRelatedBusinessObjectCollection <T>(IMultipleRelationship relationship) where T : class, IBusinessObject, new()
 {
     return(BORegistry.DataAccessor.BusinessObjectLoader.GetRelatedBusinessObjectCollection <T>(relationship));
 }
示例#28
0
		/// <summary>
		/// Creates a <see cref="RelatedBusinessObjectCollection{TBusinessObject}"/> with boType as its type parameter, using the Activator.
		/// </summary>
		/// <param name="boClassName"></param>
		/// <param name="relationship">The relationship that this <see cref="RelatedBusinessObjectCollection{TBusinessObject}"/> is the collection for</param>
		/// <param name="boAssemblyName"></param>
		/// <returns>The instantiated <see cref="RelatedBusinessObjectCollection{TBusinessObject}"/></returns>
		public static IBusinessObjectCollection CreateRelatedBusinessObjectCollection(string boAssemblyName, string boClassName, IMultipleRelationship relationship)
		{
			var collection = CreateNewRelatedBusinessObjectCollection(boAssemblyName, boClassName, relationship);
			SetupCriteriaForRelationship(relationship, collection);
			return collection;
		}
示例#29
0
        /// <summary>
        /// Creates a <see cref="RelatedBusinessObjectCollection{TBusinessObject}"/> with boType as its type parameter, using the Activator.
        /// </summary>
        /// <param name="boClassName"></param>
        /// <param name="relationship">The relationship that this <see cref="RelatedBusinessObjectCollection{TBusinessObject}"/> is the collection for</param>
        /// <param name="boAssemblyName"></param>
        /// <returns>The instantiated <see cref="RelatedBusinessObjectCollection{TBusinessObject}"/></returns>
        public static IBusinessObjectCollection CreateRelatedBusinessObjectCollection(string boAssemblyName, string boClassName, IMultipleRelationship relationship)
        {
            var collection = CreateNewRelatedBusinessObjectCollection(boAssemblyName, boClassName, relationship);

            SetupCriteriaForRelationship(relationship, collection);
            return(collection);
        }
示例#30
0
        /// <summary>
        /// Creates a <see cref="RelatedBusinessObjectCollection{TBusinessObject}"/> with boType as its type parameter, using the Activator.
        /// </summary>
        /// <param name="boType">The type parameter to be used</param>
        /// <param name="relationship">The relationship that this <see cref="RelatedBusinessObjectCollection{TBusinessObject}"/> is the collection for</param>
        /// <returns>The instantiated <see cref="RelatedBusinessObjectCollection{TBusinessObject}"/></returns>
        public static IBusinessObjectCollection CreateRelatedBusinessObjectCollection(Type boType, IMultipleRelationship relationship)
        {
            IBusinessObjectCollection collection = CreateNewRelatedBusinessObjectCollection(boType, relationship);

            SetupCriteriaForRelationship(relationship, collection);
            return(collection);
        }
 /// <summary>
 /// Sets the Value of the <see cref="IMultipleRelationship"/> to a list of values as configured using the WithMany.
 /// </summary>
 /// <param name="multipleRelationship"></param>
 private void SetRelationshipToValidValue(IMultipleRelationship multipleRelationship)
 {
     if (!_defaultValueRegistry.IsRegistered(multipleRelationship.RelationshipName)) return;
     IList lists = (IList) _defaultValueRegistry.Resolve(multipleRelationship.RelationshipName);
     if (lists == null) return;
     foreach (var item in lists)
     {
         multipleRelationship.BusinessObjectCollection.Add(item);
     }
 }
示例#32
0
		internal static void SetupCriteriaForRelationship(IMultipleRelationship relationship, IBusinessObjectCollection collection)
		{
			Criteria relationshipCriteria = Criteria.FromRelationship(relationship);
			IOrderCriteria preparedOrderCriteria;
			var orderCriteriaString = relationship.OrderCriteria.ToString();
			try
			{
				preparedOrderCriteria =
					QueryBuilder.CreateOrderCriteria(relationship.RelatedObjectClassDef, orderCriteriaString);
			}
			catch (InvalidOrderCriteriaException)
			{
				throw new InvalidOrderCriteriaException("The Relationship '" + relationship.RelationshipName 
						+ "' on the ClassDef '" + relationship.OwningBO.ClassDef.ClassNameFull 
						+ "' has an Invalid OrderCriteria '" + orderCriteriaString);
			}

			//QueryBuilder.PrepareCriteria(relationship.RelatedObjectClassDef, relationshipCriteria);
			collection.SelectQuery.Criteria = relationshipCriteria;
			collection.SelectQuery.OrderCriteria = preparedOrderCriteria;
		}
示例#33
0
 /// <summary>
 /// Loads a RelatedBusinessObjectCollection using the Relationship given.  This method is used by relationships to load based on the
 /// fields defined in the relationship.
 /// </summary>
 /// <param name="type">The type of collection to load. This must be a class that implements IBusinessObject</param>
 /// <param name="relationship">The relationship that defines the criteria that must be loaded.  For example, a Person might have
 /// a Relationship called Addresses, which defines the PersonID property as the relationship property. In this case, calling this method
 /// with the Addresses relationship will load a collection of Address where PersonID = '?', where the ? is the value of the owning Person's
 /// PersonID</param>
 /// <returns>The loaded RelatedBusinessObjectCollection</returns>
 public static IBusinessObjectCollection GetRelatedBusinessObjectCollection(Type type, IMultipleRelationship relationship)
 {
     return(BORegistry.DataAccessor.BusinessObjectLoader.GetRelatedBusinessObjectCollection(type, relationship));
 }
示例#34
0
 /// <summary>
 /// Loads a RelatedBusinessObjectCollection using the Relationship given.  This method is used by relationships to load based on the
 /// fields defined in the relationship.
 /// </summary>
 /// <param name="type">The type of collection to load. This must be a class that implements IBusinessObject</param>
 /// <param name="relationship">The relationship that defines the criteria that must be loaded.  For example, a Person might have
 /// a Relationship called Addresses, which defines the PersonID property as the relationship property. In this case, calling this method
 /// with the Addresses relationship will load a collection of Address where PersonID = '?', where the ? is the value of the owning Person's
 /// PersonID</param>
 /// <returns>The loaded RelatedBusinessObjectCollection</returns>
 public IBusinessObjectCollection GetRelatedBusinessObjectCollection(Type type, IMultipleRelationship relationship)
 {
     if (_businessObjectLoaders.ContainsKey(type))
     {
         return(_businessObjectLoaders[type].GetRelatedBusinessObjectCollection(type, relationship));
     }
     return(_defaultBusinessObjectLoader.GetRelatedBusinessObjectCollection(type, relationship));
 }