Example #1
0
 private bool MapValues(IMapOverride overrider, ResultRow row, T repoNode)
 {
     try {
         return(DbRowMapper.Map(row, repoNode, overrider));
     }
     catch (Exception ex) {
         return(LogError("DbRowMapper.Map", ex));
     }
     //Debug_n("DbRowMapper.Map success", "");
 }
Example #2
0
        public static bool Map <T>(ResultRow source,
                                   T target, IMapOverride mapOverride = null)
        {
            foreach (var kv in source)
            {
                var nme = kv.Key;
                var val = kv.Value;

                if (mapOverride?.HasOverride(nme) ?? false)
                {
                    val = mapOverride.OverrideValue(nme, val);
                }

                var ok = SetProperty(target, nme, val);
                if (!ok)
                {
                    return(false);
                }
            }
            return(true);
        }
Example #3
0
        private bool ApplyChangesToRepo(RecordSetShim sqlResult,
                                        IEnumerable <NodeRecordHash> nodeRecHashes,
                                        IMapOverride overrider)
        {
            //Info_n("Applying changes to repo...", "");

            var tblKey = DbColAttribute.Key <T>()?.Property?.Name;

            if (tblKey.IsBlank())
            {
                return(Error_n($"DbCol (IsKey=true) attribute missing from ‹{typeof(T).Name}›", ""));
            }

            if (_deleteIfNotInSqlDB)
            {
                foreach (var d7n in nodeRecHashes)
                {
                    if (!FoundIn(sqlResult, tblKey, d7n))
                    {
                        _writr.DeleteLater(_writr[d7n.nid]);
                    }
                }
            }

            var hashField = D7HashFieldAttribute.FindIn <T>();

            foreach (var row in sqlResult)
            {
                var tweakdRow = TweakSqlRow(row);
                var dbRecID   = tweakdRow.AsInt(tblKey);
                var dbRowSha1 = _serialr.SHA1(tweakdRow);
                var repoNode  = new T();
                var d7RecHash = nodeRecHashes.FirstOrDefault(x => x.dbID == dbRecID);


                if (d7RecHash != null)
                {
                    repoNode = _writr[d7RecHash.nid];
                    if (repoNode == null)
                    {
                        return(Error_n("Nid found in hash-json BUT NOT in repo-json.", "You may need to clear/reload the repo."));
                    }
                }

                if (dbRowSha1 != d7RecHash?.sha1)
                {
                    if (!MapValues(overrider, tweakdRow, repoNode))
                    {
                        return(false);
                    }

                    hashField?.ModelProperty?
                    .SetValue(repoNode, dbRowSha1, null);
                }

                if (d7RecHash == null)
                {
                    _writr.AddLater(repoNode);
                }
            }
            return(true);
        }