public static void ComputeUrlRelation(SiteDb sitedb, Guid objectId, byte constType, List <string> urllist) { List <Guid> internalRoutes = new List <Guid>(); List <Guid> ExternalResource = new List <Guid>(); var oldRouteRelations = sitedb.Relations.GetRelationViaRoutes(objectId); var oldExternalResourceRelations = sitedb.Relations.GetExternalRelations(objectId, 0); byte FinalDestConstType = 0; foreach (var item in urllist.Distinct()) { FinalDestConstType = ConstTypeService.GetConstTypeByUrl(item);; if (Service.DomUrlService.IsExternalLink(item)) { Guid externalid = Kooboo.Data.IDGenerator.Generate(item, ConstObjectType.ExternalResource); ExternalResource.Add(externalid); if (oldExternalResourceRelations.Find(o => o.objectYId == externalid) == null) { sitedb.ExternalResource.AddOrUpdate(item, FinalDestConstType); } } else { var routeids = DomRelation.GetRouteIds(sitedb, item); internalRoutes.AddRange(routeids); if (routeids.Count == 1 && oldRouteRelations.Find(o => o.objectYId == routeids[0]) == null) { sitedb.Routes.EnsureExists(item, FinalDestConstType); } } } foreach (var item in oldRouteRelations) { if (!internalRoutes.Contains(item.objectYId)) { sitedb.Relations.Delete(item.Id); } } foreach (var item in internalRoutes) { if (oldRouteRelations.Find(o => o.objectYId == item) == null) { sitedb.Relations.AddOrUpdate(objectId, item, constType, ConstObjectType.Route, FinalDestConstType); } } foreach (var item in oldExternalResourceRelations) { if (!ExternalResource.Contains(item.objectYId)) { sitedb.Relations.Delete(item.Id); } } foreach (var item in ExternalResource) { if (oldExternalResourceRelations.Find(o => o.objectYId == item) == null) { sitedb.Relations.AddOrUpdate(objectId, item, constType, ConstObjectType.ExternalResource, FinalDestConstType); } } }