private async Task SyncCacheAndDb() { foreach (var cacheNode in _nodeCache.NodeList) { var existingDbNode = CachedDbNodes .FirstOrDefault(dbn => dbn.NodeAddresses.Any(ia => ia.Ip == cacheNode.Ip)); if (existingDbNode == null) { var newDbNode = Mapper.Map <Node>(cacheNode); newDbNode.Type = NodeAddressType.P2P_TCP; newDbNode.Net = _netsettings.Value.Net; _ctx.Nodes.Add(newDbNode); await _ctx.SaveChangesAsync(); var nodeDbAddress = new NodeAddress { Ip = cacheNode.Ip, Port = cacheNode.Port, Type = NodeAddressType.P2P_TCP, NodeId = newDbNode.Id }; _ctx.NodeAddresses.Add(nodeDbAddress); await _ctx.SaveChangesAsync(); } else { var portIsDifferent = existingDbNode.NodeAddresses.FirstOrDefault(na => na.Port == cacheNode.Port) == null; if (portIsDifferent) { var nodeDbAddress = new NodeAddress { Ip = cacheNode.Ip, Port = cacheNode.Port, Type = NodeAddressType.P2P_TCP, NodeId = existingDbNode.Id }; _ctx.NodeAddresses.Add(nodeDbAddress); await _ctx.SaveChangesAsync(); } } } }
public async Task UpdateNodeInfo(StateOfNeoContext db, Node node) { var stopwatch = Stopwatch.StartNew(); var height = await this.GetNodeHeight(node); stopwatch.Stop(); var latency = stopwatch.ElapsedMilliseconds; if (!height.HasValue) { node.Height = height; } db.Nodes.Update(node); await db.SaveChangesAsync(); }