/// <summary>Creates service definition that can be registered with a server</summary> /// <param name="serviceImpl">An object implementing the server-side handling logic.</param> public static grpc::ServerServiceDefinition BindService(HierarchyBase serviceImpl) { return(grpc::ServerServiceDefinition.CreateBuilder() .AddMethod(__Method_DeepPing, serviceImpl.DeepPing) .AddMethod(__Method_GetNode, serviceImpl.GetNode) .AddMethod(__Method_GetNodes, serviceImpl.GetNodes) .AddMethod(__Method_GetChildNodes, serviceImpl.GetChildNodes) .AddMethod(__Method_GetParentNode, serviceImpl.GetParentNode) .AddMethod(__Method_GetAncestors, serviceImpl.GetAncestors) .AddMethod(__Method_SaveNode, serviceImpl.SaveNode) .AddMethod(__Method_DeleteNode, serviceImpl.DeleteNode) .AddMethod(__Method_GetEvents, serviceImpl.GetEvents) .AddMethod(__Method_GetEventStream, serviceImpl.GetEventStream).Build()); }
public static void HydrateHierarchyChildren(List <HierarchyBase> flatHierList) { Dictionary <long, HierarchyBase> dict = flatHierList.ToDictionary(h => h.Id); foreach (HierarchyBase currHier in flatHierList) { if (currHier.Id == currHier.ParentId || currHier.ParentId == null) { // Sanity check to avoid circular reference continue; } HierarchyBase parentObj = null; if (!dict.TryGetValue(currHier.ParentId.Value, out parentObj)) { continue; } parentObj.Children.Add(currHier); } }
public List <HierarchyBase> GetConsolidatedHierarchy() { // Dillema: do we send it out in hierarchical structure or flat structure? // For this function, just give the flat structure // Maybe make it a parameter whether to give it as flat or hierarchical List <HierarchyBase> retList = new List <HierarchyBase>(); using (SqlCommand command = new SqlCommand(@"SELECT * FROM DimHierarchyConsolidated", connection)) { using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { HierarchyBase newHier = new HierarchyBase() { Id = Convert.ToInt64(reader["Id"]), //ParentId = reader["ParentId"] == DBNull.Value ? null : Convert.ToInt64(reader["ParentId"]), ParentId = null, ServerName = reader["ServerName"].ToString(), NodeName = reader["NodeName"].ToString(), FullPath = reader["FullPath"].ToString(), UnitType = reader["UnitType"].ToString(), Children = new List <HierarchyBase>() }; if (reader["ParentId"] != DBNull.Value) { newHier.ParentId = Convert.ToInt64(reader["ParentId"]); } retList.Add(newHier); } } } return(retList); }
private static async Task EnsureSeedHierarchyData <TIdentityDbContext>(TIdentityDbContext context, HierarchyData hierarchyData) where TIdentityDbContext : DbContext, IAdminIdentityDbContext { if (context.HierarchyBases.Count() > 0) { return; } string getKeyId(HierarchyBase hierarchy) { if (hierarchy == null) { return((context.HierarchyBases.Where(o => !o.Pid.HasValue).Count() + 1).ToString()); } else { return((context.HierarchyBases.Where(o => o.Pid == hierarchy.Id).Select(o => o.Text).Distinct().Count() + 1).ToString()); } } HierarchyBase getHierarchyDataModel(string name, HierarchyBase hierarchy) { if (hierarchy != null) { if (name.Contains(",")) { foreach (string item in name.Split(",")) { var exist = context.HierarchyBases.Where(o => o.Parent.Id == hierarchy.Id && o.Text == item.Trim()).FirstOrDefault(); if (exist != null) { continue; } var entity = context.HierarchyBases.Add(new HierarchyBase() { Text = item.Trim(), Pid = hierarchy.Id, Description = item.Trim(), DataKey = $"{hierarchy.DataKey}{getKeyId(hierarchy)}|" }).Entity; context.SaveChanges(); } //包含<,>,表示有多个平级,默认为末级,返回null,跳出循环 return(null); } else { var exist = context.HierarchyBases.Where(o => o.Parent.Id == hierarchy.Id && o.Text == name.Trim()).FirstOrDefault(); if (exist != null) { return(exist); } var entity = context.HierarchyBases.Add(new HierarchyBase() { Text = name.Trim(), Pid = hierarchy.Id, Description = name.Trim(), DataKey = $"{hierarchy.DataKey}{getKeyId(hierarchy)}|" }).Entity; context.SaveChanges(); return(entity); } } else { var exist = context.HierarchyBases.Where(o => !o.Pid.HasValue && o.Text == name).FirstOrDefault(); if (exist != null) { return(exist); } var entity = context.HierarchyBases.Add(new HierarchyBase() { Text = name.Trim(), Description = name.Trim(), DataKey = $"|{getKeyId(null)}|" }).Entity; context.SaveChanges(); return(entity); } } foreach (var branch in hierarchyData.Branchs) { var hierarchNames = branch.Split('|'); HierarchyBase parent = null; foreach (var name in hierarchNames) { parent = getHierarchyDataModel(name, parent); if (parent == null) { break; } } } await Task.CompletedTask; }