---
title: SAIF.Framework.Preferences dependencies
summary: Internal and external dependencies for this library.
status: draft
owner: <owner>
last_reviewed: 2026-07-23
library: SAIF.Framework.Preferences
reference_type: package
---

# SAIF.Framework.Preferences dependencies

`SAIF.Framework.Preferences` has a minimal dependency footprint: one internal binary reference to `SAIF.Framework` (built from `SAIF.Framework.Core`), standard .NET BCL assemblies, and one Oracle database table. No NuGet `<PackageReference>` or `packages.config` entries were found in the project file.

## Internal dependencies

| Dependency | Type | Usage |
| --- | --- | --- |
| SAIF.Framework (assembly, produced by SAIF.Framework.Core) | Internal | Resolved via a `HintPath` binary reference (`..\SAIF.Framework.Core\bin\SAIF.Framework.dll`), not a `<ProjectReference>`. Provides `IDataPortalInfo`, `SqlHelper.ResultSetQuery`, `SqlHelper.ScalarQuery<T>`, `SqlHelper.NewParm`, and `clsResultSet.DataRow`, used directly by `PreferenceData` to execute inline SQL against [USER_PREFERENCE](database-tables.md#user_preference).* |

## External dependencies

| Dependency | Version | Usage |
| --- | --- | --- |
| System, System.Core, System.Data, System.Xml, System.Xml.Linq, System.Data.DataSetExtensions | (BCL, project-referenced) | Standard .NET assembly references declared in the `.csproj`. |
| System.Web.Extensions | (BCL, project-referenced) | Provides `System.Web.Script.Serialization.JavaScriptSerializer`, used in `GetPreferencesForUser` to deserialize the `PREFERENCE_TEXT` JSON payload into a `Dictionary<string,string>`. |

## Dependency risks and notes
- **Deviation from standard BOF pattern**: Unlike most BOF libraries, `PreferenceData` bypasses the `clsBusinessBase`/`clsBusinessCollectionBase` + `IBusinessCriteria` object-lifecycle model and issues inline Oracle SQL directly through `SqlHelper.ResultSetQuery`/`SqlHelper.ScalarQuery<T>` against a single table, [USER_PREFERENCE](database-tables.md#user_preference). Consumers and maintainers expecting the standard business-object/criteria pattern should be aware this library does not follow it.
- **Binary reference, not project reference**: The dependency on `SAIF.Framework` is wired through a `HintPath` reference to a prebuilt DLL rather than a `<ProjectReference>` to `SAIF.Framework.Core`. The local `.sln` builds against the sibling project's output, but the `.csproj` itself does not express this as a project-to-project reference, which can cause stale-binary risk if `SAIF.Framework.Core` changes without a rebuild in dependency order.*
- **Externally supplied execution context**: This library resolves no configuration or connection settings itself (no `IEnvironmentService`, `ConfigurationManager.AppSettings`, `Web.config`/`App.config`, or `DbConnectionManager` usage). All database/portal context is supplied by the caller via the injected `IDataPortalInfo`, so correctness depends entirely on the host application configuring that context correctly.
- **Open question — possible duplicate implementation**: A separate `PreferenceData.vb` implementing similar preference persistence exists at `SAIF.Framework.Core\Preferences\PreferenceData.vb`. This is a distinct file belonging to `SAIF.Framework.Core`, outside the scope of this library's analysis; whether it duplicates, supersedes, or is unrelated to this library's `PreferenceData` class is unconfirmed and should be resolved before consolidating documentation across the two libraries.**
- **Single-table, no-join footprint**: All 7 cataloged SQL statements (see [SQL catalog](sql/index.md)) in this library reference only [USER_PREFERENCE](database-tables.md#user_preference), with no joins or foreign-key relationships to other tables, limiting the blast radius of schema changes to this one table.
- Database type is Oracle, evidenced by colon-prefixed bind variables (`:userid`, `:appname`, `:pagename`, `:prefs`, `:updated`, `:updateby`) and the `USER_PREFERENCE_SEQ.nextval` sequence-generation idiom used for key generation in `InsertPref`. No `OWNER.TABLE_NAME` schema qualifier appears in any SQL statement, and no `Web.config`/`App.config` file exists in this library to confirm the connecting Oracle schema owner.**

> **Note:** Statements marked with * were inferred from code structure, naming conventions, or
> contextual evidence where direct confirmation was not available in source artifacts. Statements
> marked with ** could not be confirmed; treat as unknown until verified.

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Operations and processes](operations-processes.md)
- [Business rules](business-rules.md)
- [Configuration](configuration.md)
- [Database tables](database-tables.md)
- [SQL catalog](sql/index.md)
- [API reference](api/index.md)

## Sources
- SAIF.Framework.Preferences\SAIF.Framework.Preferences.csproj
- SAIF.Framework.Preferences\PreferenceData.cs
- SAIF.Framework.Preferences\Preference.cs
- SAIF.Framework.Core\V1\DataAccessLayer\SqlHelper.vb
- SAIF.Framework.Core\Preferences\PreferenceData.vb
