---
title: clsProviderRelationshipCollection
summary: API reference for clsProviderRelationshipCollection.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-07-24
library: SAIF.Business.View.Provider
reference_type: package
---

# clsProviderRelationshipCollection

API reference for clsProviderRelationshipCollection.

## Purpose
- Collection wrapper (`clsBusinessCollection(Of clsProviderRelationship)`) that retrieves the set of relationships for a provider location.
- Nested `Criteria` implements `IBusinessCriteria` and supplies its own `RetrieveSQL`.

## Context
- Namespace: `SAIF.Business.View.Provider`
- Assembly/package: `SAIF.BOF.Business.View.Provider`

## Public members
| Member | Signature | Purpose |
| --- | --- | --- |
| RelationshipTypes | `Public Enum RelationshipTypes: Child, Parent` | Enumerates which side (child or parent) of a relationship a given `clsProviderLocation` occupies. |
| ActiveOnly | `Property ActiveOnly() As Boolean` | Gets or sets whether `WorksFor` (parameterless overload) restricts results to currently active relationships; defaults to `True`. |
| ProviderLocationID | `ReadOnly Property ProviderLocationID() As Decimal` | Returns the provider location this collection's relationships were queried against. |
| ProviderLocations | `ReadOnly Property ProviderLocations() As clsProviderLocationCollection` | Lazily builds and returns a `clsProviderLocationCollection` containing each relationship's `DestinationProviderLocation`; cached until the underlying list changes. |
| WorksFor() | `ReadOnly Property WorksFor() As clsProviderRelationshipCollection` | Returns relationships with `ProviderRelationshipCode = "WRK"`, additionally filtered to `IsActive` when `ActiveOnly` is `True`. |
| WorksFor(activeDate) | `ReadOnly Property WorksFor(ByVal activeDate As Date) As clsProviderRelationshipCollection` | Returns "WRK" relationships whose `StartDate`/`TerminationDate` range includes `activeDate` (treating `Date.MinValue` termination as `Date.MaxValue`). |
| Item(Index) | `Default Shadows ReadOnly Property Item(ByVal Index As Integer) As clsProviderRelationship` | Returns the relationship at the supplied collection index. |
| Item(inProviderLocationID) | `Default Shadows ReadOnly Property Item(ByVal inProviderLocationID As Decimal) As clsProviderRelationship` | Returns the relationship whose `ChildProviderLocationID` matches the supplied value, or `Nothing`. |
| MyCriteria | `ReadOnly Property MyCriteria() As Criteria` | Returns the object's `Criteria` instance, strongly typed from `CriteriaObject`. |
| Add | `Shadows Function Add(ByVal inProviderRelationship As clsProviderRelationship) As Integer` | Adds a relationship to the collection through the BOF base implementation, clearing the cached `ProviderLocations` collection. |
| Contains(inProviderRelationship) | `Overloads Function Contains(ByVal inProviderRelationship As clsProviderRelationship) As Boolean` | Returns whether the active list contains a relationship equal to `inProviderRelationship`. |
| Contains(inProviderLocationID) | `Overloads Function Contains(ByVal inProviderLocationID As Decimal) As Boolean` | Returns whether the active list contains a relationship whose `ChildProviderLocationID` matches (via `clsProviderRelationship.Equals(Decimal)`). |
| ContainsDeleted(inProviderRelationship) | `Overloads Function ContainsDeleted(ByVal inProviderRelationship As clsProviderRelationship) As Boolean` | Returns whether the deleted-items list contains a relationship equal to `inProviderRelationship`. |
| ContainsDeleted(inProviderLocationID) | `Overloads Function ContainsDeleted(ByVal inProviderLocationID As Decimal) As Boolean` | Returns whether the deleted-items list contains a relationship whose `ChildProviderLocationID` matches the supplied value. |
| Save() | `Overrides Function Save() As Boolean` | Applies the pending edit transaction, then persists the collection through the BOF base `Save()`. |
| Where | `Function Where(ByVal match As Predicate(Of clsProviderRelationship)) As clsProviderRelationshipCollection` | Returns a new collection containing only the members matching the supplied predicate (delegates to `ListWhere`). |
| GetChildProviderRelationshipCollection | `Shared Function GetChildProviderRelationshipCollection(ByVal inDataportal As IDataPortalInfo, ByVal inProviderLocationID As Decimal) As clsProviderRelationshipCollection` | Retrieves the relationships where the given location is the parent (i.e., its children) through [SQL-013](../../sql/SQL-013-saif-business-view-provider.md). |
| GetParentProviderRelationshipCollection | `Shared Function GetParentProviderRelationshipCollection(ByVal inDataportal As IDataPortalInfo, ByVal inProviderLocationID As Decimal) As clsProviderRelationshipCollection` | Retrieves the relationships where the given location is the child (i.e., its parents) through [SQL-014](../../sql/SQL-014-saif-business-view-provider.md). |

## Behavioral notes
- `BeforeRetrieve` supplies `ProviderLocationID` as the single bind parameter; `AfterRetrieve` reads each row into both a new `clsProviderRelationship` (via its internal `Load(...)`, which also constructs the destination `clsProviderLocation` from the same row) and the parallel `ProviderLocations` cache, adding both to their respective lists.
- The `Criteria.RetrieveSQL` property selects between two hand-written SQL statements based on `SourceRelationshipType`: `RetrieveParentRelationshipsSQL` (documented as [SQL-014](../../sql/SQL-014-saif-business-view-provider.md)) when the source is a Child, and `RetrieveChildRelationshipsSQL` (documented as [SQL-013](../../sql/SQL-013-saif-business-view-provider.md)) otherwise — this indirection is why `GetChildProviderRelationshipCollection` passes `RelationshipTypes.Parent` and `GetParentProviderRelationshipCollection` passes `RelationshipTypes.Child` to the `Criteria` constructor.
- The nested `Criteria` throws `ApplicationException` from `CreateSQL`, `InsertSQL`, `UpdateSQL`, and `DeleteSQL`; the collection is retrieve-only for new-row creation even though `Save()` applies pending edits to already-loaded members.

## Constraints and usage notes
- Instances are constructed only through `GetChildProviderRelationshipCollection(...)` or `GetParentProviderRelationshipCollection(...)`; the `Protected` constructor (which sets `allowedit`/`allowremove`/`allowsort`/`allowfind` to `True`) is not part of the public surface.

## Inherited members (from clsBusinessCollectionBase via clsBusinessCollection(Of T))

This collection type inherits the following public surface from clsBusinessCollectionBase (`Legacy\BusinessObjectFramework\clsBusinessCollectionBase.vb`), in addition to the members listed above:

| Member | Signature | Purpose |
| --- | --- | --- |
| Item | `Default Public ReadOnly Property Item(ByVal index As Integer) As clsBusinessBase` | Returns the collection member at the given index (default indexer). |
| Add | `Sub Add(ByVal inChild As clsBusinessBase)` | Adds a child business object to the collection. |
| Remove | `Sub Remove(ByVal inChild As clsBusinessBase)` | Marks a child business object as deleted and removes it from the active list. |
| ItemByGuid | `ReadOnly Property ItemByGuid(ByVal inGuid As String) As clsBusinessBase` | Returns the collection member matching the given internal GUID. |
| MyGuid | `ReadOnly Property MyGuid() As String` | Returns the internal GUID that uniquely identifies this in-memory collection instance. |
| IsDirty | `ReadOnly Property IsDirty() As Boolean` | Indicates whether the collection or any child member has unsaved changes. |
| IsValid | `Overridable ReadOnly Property IsValid() As Boolean` | Indicates whether all child members currently have no broken validation rules. |
| ValidateAllChildren | `Overridable Property ValidateAllChildren() As Boolean` | Controls whether every child is validated or only the current item. |
| Rules | `ReadOnly Property Rules() As clsRulesManager` | Returns the rules manager that tracks broken rules for the collection. |
| ErrorCount / ErrorMessages | `ReadOnly Property ErrorCount() As Integer` / `ReadOnly Property ErrorMessages() As String()` | Returns the count and text of broken error-severity rules across the collection. |
| WarningCount / WarningMessages | `ReadOnly Property WarningCount() As Integer` / `ReadOnly Property WarningMessages() As String()` | Returns the count and text of broken warning-severity rules across the collection. |
| InformationalCount / InformationalMessages | `ReadOnly Property InformationalCount() As Integer` / `ReadOnly Property InformationalMessages() As String()` | Returns the count and text of broken informational-severity rules across the collection. |
| BeginEdit / CancelEdit / ApplyEdit | `Sub BeginEdit()` / `Sub CancelEdit()` / `Sub ApplyEdit()` | Begins, rolls back, or commits an edit transaction across the collection. |
| SaveChild | `Overridable Function SaveChild() As Boolean` | Persists the collection as a child of a parent object. |
| Clone | `Function Clone() As Object` | Returns a deep copy of the collection and its members. |
| IsManaged | `ReadOnly Property IsManaged() As Boolean` | Indicates whether the collection is managed by a parent object's lifecycle. |
| First / FirstItem | `Function First() As clsBusinessBase` / `ReadOnly Property FirstItem() As clsBusinessBase` | Moves to and/or returns the first item in traversal order. |
| Next / NextItem | `Function [Next]() As clsBusinessBase` / `ReadOnly Property NextItem() As clsBusinessBase` | Moves to and/or returns the next item in traversal order. |
| Previous / PreviousItem | `Function Previous() As clsBusinessBase` / `ReadOnly Property PreviousItem() As clsBusinessBase` | Moves to and/or returns the previous item in traversal order. |
| Last / LastItem | `Function Last() As clsBusinessBase` / `ReadOnly Property LastItem() As clsBusinessBase` | Moves to and/or returns the last item in traversal order. |
| CurrentIndex | `ReadOnly Property CurrentIndex() As Integer` | Returns the index of the current traversal item. |
| SetCurrent | `Sub SetCurrent(ByRef inObject As clsBusinessBase)` / `Sub SetCurrent(ByVal inIndex As Integer)` | Sets the current traversal position by item or index. |
| IndexOf | `ReadOnly Property IndexOf(ByVal inObject As clsBusinessBase) As Integer` | Returns the index of the given item within the collection. |
| IsFirst / IsNext / IsLast / IsPrevious / IsCurrent | `ReadOnly Property IsFirst(ByVal inItem As clsBusinessBase) As Boolean` (and analogous overloads) | Indicate an item's position relative to the current traversal state. |
| XMLElementName / XMLItemName | `Property XMLElementName() As String` / `Property XMLItemName() As String` | Get or set the XML element/item names used when serializing the collection. |
| GetReportXML | `Function GetReportXML(ByVal inElementName As String) As String` (and file-stream overload) | Returns an XML fragment representing the collection and its members. |
| ToXML / ToXml | `Function ToXML() As String` / `Function ToXml(ByVal inTagName As String) As String` | Serializes the collection to XML using the default or a supplied tag name. |

## Sources
- `Business\SAIF.Business.View.Provider\clsProviderRelationshipCollection.vb`
