public static CommandEntity FromProperties(IReadOnlyDictionary <string, object> properties, RepositoryEntityMetadata metadata) { properties.GuardAgainstNull(nameof(properties)); metadata.GuardAgainstNull(nameof(metadata)); if (!properties.ContainsKey(nameof(Id)) || properties[nameof(Id)] == null) { throw new InvalidOperationException( "Unable to create a new CommandEntity. There is no 'Id' property in this collection of values."); } var result = new CommandEntity(properties[nameof(Id)].ToString()); foreach (var property in properties) { var propertyType = metadata.GetPropertyType(property.Key, false); if (propertyType != null) { result.Add(property.Key, property.Value, propertyType); } } return(result); }
public static CommandEntity FromCommandEntity(IReadOnlyDictionary <string, object> properties, RepositoryEntityMetadata metadata) { properties.GuardAgainstNull(nameof(properties)); metadata.GuardAgainstNull(nameof(metadata)); return(FromProperties(properties, metadata)); }
public CommandEntity Retrieve(string containerName, string id, RepositoryEntityMetadata metadata) { containerName.GuardAgainstNullOrEmpty(nameof(containerName)); id.GuardAgainstNullOrEmpty(nameof(id)); metadata.GuardAgainstNull(nameof(metadata)); var container = EnsureContainer(containerName); if (container.Exists(id)) { return(CommandEntity.FromCommandEntity( container.Get(id).FromFileProperties(metadata), metadata)); } return(default);
public CommandEntity Retrieve(string containerName, string id, RepositoryEntityMetadata metadata) { containerName.GuardAgainstNullOrEmpty(nameof(containerName)); id.GuardAgainstNullOrEmpty(nameof(id)); metadata.GuardAgainstNull(nameof(metadata)); if (this.containers.ContainsKey(containerName)) { if (this.containers[containerName].ContainsKey(id)) { return(CommandEntity.FromCommandEntity( this.containers[containerName][id].FromDictionaryProperties(), metadata)); } } return(default);
public static QueryEntity FromProperties(IReadOnlyDictionary <string, object> properties, RepositoryEntityMetadata metadata) { properties.GuardAgainstNull(nameof(properties)); metadata.GuardAgainstNull(nameof(metadata)); var dataEntity = new QueryEntity(); foreach (var pair in properties) { var propertyType = metadata.GetPropertyType(pair.Key, false); if (propertyType != null) { dataEntity.Add(pair.Key, pair.Value, propertyType); } } return(dataEntity); }
public static List <QueryEntity> FetchAllIntoMemory <TQueryableEntity>(this QueryClause <TQueryableEntity> query, IRepository repository, RepositoryEntityMetadata metadata, Func <Dictionary <string, IReadOnlyDictionary <string, object> > > getPrimaryEntities, Func <QueriedEntity, Dictionary <string, IReadOnlyDictionary <string, object> > > getJoinedEntities) where TQueryableEntity : IQueryableEntity { repository.GuardAgainstNull(nameof(repository)); query.GuardAgainstNull(nameof(query)); metadata.GuardAgainstNull(nameof(metadata)); getPrimaryEntities.GuardAgainstNull(nameof(getPrimaryEntities)); getJoinedEntities.GuardAgainstNull(nameof(getJoinedEntities)); var take = query.GetDefaultTake(repository); if (take == 0) { return(new List <QueryEntity>()); } var primaryEntities = getPrimaryEntities(); if (!primaryEntities.HasAny()) { return(new List <QueryEntity>()); } var joinedContainers = query.JoinedEntities .Where(je => je.Join.Exists()) .ToDictionary(je => je.EntityName, je => new { Collection = getJoinedEntities(je), JoinedEntity = je }); List <KeyValuePair <string, IReadOnlyDictionary <string, object> > > joinedEntities = null; if (!joinedContainers.Any()) { joinedEntities = primaryEntities .Select(pe => new KeyValuePair <string, IReadOnlyDictionary <string, object> >(pe.Key, pe.Value)) .ToList(); } else { foreach (var joinedContainer in joinedContainers) { var joinedEntity = joinedContainer.Value.JoinedEntity; var join = joinedEntity.Join; var rightEntities = joinedContainer.Value.Collection .ToDictionary(e => e.Key, e => e.Value); joinedEntities = join .JoinResults(primaryEntities, rightEntities, joinedEntity.Selects.ProjectSelectedJoinedProperties()); } } var results = joinedEntities?.AsQueryable(); var orderBy = query.ToDynamicLinqOrderByClause(); var skip = query.GetDefaultSkip(); if (query.Wheres.Any()) { var whereBy = query.Wheres.ToDynamicLinqWhereClause(); results = results .Where(whereBy); } return(results .OrderBy(orderBy) .Skip(skip) .Take(take) .Select(sel => new KeyValuePair <string, IReadOnlyDictionary <string, object> >(sel.Key, sel.Value)) .CherryPickSelectedProperties(query) .Select(ped => QueryEntity.FromProperties(ped.Value, metadata)) .ToList()); }