예제 #1
0
        private IDictionary <object, ResourceResolverEntry> ResolveResourcesByField(IReadOnlyCollection <object> resourceIdentities)
        {
            var result = new Dictionary <object, ResourceResolverEntry>( );

            // Resolve entity (use Name for now)
            ILookup <object, long> lookup = _entityResolver.GetEntitiesByField(resourceIdentities);

            // Look up IDs for the identitifiers
            Dictionary <long, object> entityIDs = new Dictionary <long, object>( );

            foreach (object resourceIdentity in resourceIdentities)
            {
                if (!lookup.Contains(resourceIdentity))
                {
                    result[resourceIdentity] = new ResourceResolverEntry(ResourceResolverError.ResourceNotFoundByField);
                    continue;
                }

                // Check entity count
                long [] entityIds = lookup [resourceIdentity].Take(2).ToArray( );

                if (entityIds.Length != 1)
                {
                    result [resourceIdentity] = new ResourceResolverEntry(ResourceResolverError.ResourceNotUniqueByField);
                    continue;
                }

                entityIDs.Add(entityIds [0], resourceIdentity);
            }

            // Load entities for the IDs.
            IEnumerable <IEntity> entities = Entity.Get(entityIDs.Keys);

            foreach (IEntity entity in entities)
            {
                object resourceIdentity = entityIDs [entity.Id];
                result [resourceIdentity] = new ResourceResolverEntry(entity);
            }

            return(result);
        }