public JoinReader(IReference reference) { IReferenceMetadata metadata = reference.List ?? reference.Find(ReferenceFlags.Child).Metadata; this.Metadata = metadata.Identity.Require <IBindingMetadata>(); this.Identity = this.Metadata.Identity; }
public int GetJoinIndex(IReference reference) { IReference childReference = reference.Find(ReferenceFlags.Child); MetadataIdentity target = childReference.Metadata.Identity; int parentIndex = this.GetListIndex(reference); lock (this.state) { Dictionary <MetadataIdentity, int> innerMap = this.childMap.GetOrAdd(parentIndex); return(innerMap.GetOrAdd(target, innerMap.Count)); } }
public static IReferenceKey FindKey(this IReference reference, ReferenceFlags flag) => reference.Find(flag)?.Key;
private IEnumerable <Type> GetParentKeyType(IReference reference) { IReference parentReference = reference.Find(ReferenceFlags.Parent); return(parentReference.Key.Properties.Select(m => m.Type.GetKeyType())); }