Entity whose records the paths are rooted at (e.g. 'MJ: Content Items').
Resolve the path value for each record. Accepts any BaseEntity batch whose entity matches the resolver's root entity. Returns a map keyed by the record's normalized primary-key value; a missing/null entry means the value could not be resolved for that record — callers decide what that means (one unresolvable record never poisons the rest).
Resolves per-record values for field paths rooted at a batch of records — the generic machinery behind provider-declared source-record dependencies (see
VectorDBBase.GetSourceRecordFieldPaths), usable for any config that needs a value living on a related record.Two path forms are supported:
"OrganizationID"): the value is read directly off the record's own field set."ContentSourceID.OrganizationID"): the first segment names a foreign-key field on the root entity; the second names a field on the related entity. The related record is loaded and — when the related entity is an IS-A parent type — its child-type rows (shared primary key) are loaded and merged over it, so a field that physically lives on an IS-A extension entity (e.g.myschema.ContentSource.OrganizationID) resolves without the configuration ever naming the child entity.Only single-valued FK hops are traversed (never 1:N relationships) and path depth is capped at one hop, which keeps resolution O(distinct FK values) per pass. Deeper paths are a configuration error: they log and resolve nothing, which callers treat per their own policy.
Resolution is lazy and batched: callers create one resolver per pass and call ResolveForItems per record batch. Distinct FK values are loaded with a single
IN (...)query per entity (base + each IS-A child) and cached for the resolver's lifetime, so a related record referenced by ten thousand rows is loaded once per pass.