Exemplo n.º 1
0
        private IList <EntityRecord> RunIncludeForEntityRef(IList <EntityRecord> records, EntityMemberInfo refMember)
        {
            if (records.Count == 0)
            {
                return(_emptyList);
            }
            var fkMember = refMember.ReferenceInfo.FromKey.ExpandedKeyMembers[0].Member; // r.Book_Id
            var fkValues = GetMemberValues(records, fkMember);
            var cmd      = refMember.ReferenceInfo.ToKey.SelectByKeyArrayCommand;
            var newRecs  = _session.ExecuteSelect(cmd, fkValues);

            if (newRecs.Count == 0)
            {
                return(_emptyList);
            }
            // Set ref members in parent records
            var targetPk = refMember.ReferenceInfo.ToKey;

            foreach (var parentRec in records)
            {
                var fkValue = parentRec.GetValueDirect(fkMember);
                if (fkValue == DBNull.Value)
                {
                    parentRec.SetValueDirect(refMember, DBNull.Value);
                }
                else
                {
                    var pkKey = new EntityKey(targetPk, fkValue);
                    //we lookup in session, instead of searching in results of Include query - all just loaded records are registered in session and lookup is done by key (it is fact dict lookup)
                    var targetRec = _session.GetRecord(pkKey);
                    parentRec.SetValueDirect(refMember, targetRec);
                }
            }
            return(newRecs);
        }