Esempio n. 1
0
        private Dictionary <string, int> GetLastMaxIdDict(SyncInfo syncInfo)
        {
            var bll        = new DbSyncStatusBll();
            var startsDict = syncInfo.ExportMaxIdDict;

            if (syncInfo.ServerWriteSuccess)
            {
                // 由于上次导入的数据已成功同步至服务端
                // 因此,将上将导出数据的最大 Id 写入数据库
                // 以作为下次导出数据的依据
                var models = startsDict.Select(couple => new DbSyncStatus
                {
                    DbIdentity = string.Empty,
                    TableName  = couple.Key,
                    Position   = couple.Value,
                    LastTime   = DateTime.Now
                });
                bll.BulkInsert(models);
            }
            else
            {
                startsDict = new Dictionary <string, int>();
                var list = bll.QueryAll();
                foreach (var o in list)
                {
                    startsDict.Add(o.TableName, o.Position);
                }
            }
            return(startsDict);
        }
Esempio n. 2
0
        private void AddClientDbStatus(DbSyncStatus status)
        {
            var bll = new DbSyncStatusBll();

            for (var i = 0; i < 5; i++)
            {
                bll.Insert(status);
                if (status.Id > 0)
                {
                    return;
                }
            }

            throw new Exception($"插入 DbSyncStatus 失败,Identity={status.DbIdentity}, Position=${status.Position}, LastTime={status.LastTime}");
        }
Esempio n. 3
0
        public SyncInfo Export(SyncInfo syncInfo)
        {
            var dbLogMaxId = syncInfo.DbUpdateLogMaxId;
            var bll        = new DbSyncStatusBll();
            var status     = bll.QuerySingle($"[DbIdentity]='{syncInfo.DbIdentity}'");

            if (status == null)
            {
                status = new DbSyncStatus
                {
                    DbIdentity = syncInfo.DbIdentity.ToString(),
                    LastTime   = DateTime.Now,
                    Position   = dbLogMaxId,
                    TableName  = nameof(DbUpdateLog)
                };
                AddClientDbStatus(status);
            }

            if (syncInfo.ClientWriteSuccess)
            {
                status.Position = dbLogMaxId;
                status.LastTime = DateTime.Now;
                bll.Update(status);
            }
            else
            {
                dbLogMaxId = status.Position;
            }

            var newData = GetNewData(dbLogMaxId);

            syncInfo.ServerData         = newData.Data;
            syncInfo.PathList           = newData.PathList;
            syncInfo.ClientWriteSuccess = false;
            syncInfo.ServerNewDataFlag  = newData.NewDataFlag;

            var dbLogBll = new DbUpdateLogBll();

            syncInfo.DbUpdateLogMaxId = (int)dbLogBll.GetMaxId();

            return(syncInfo);
        }