コード例 #1
0
    private void ResolveEntityCollection(FluentCommandDetails details)
    {
        if (string.IsNullOrEmpty(Details.CollectionName) && string.IsNullOrEmpty(Details.LinkName))
        {
            EntityCollection = null;
        }
        else
        {
            EntityCollection entityCollection;
            if (!string.IsNullOrEmpty(Details.LinkName))
            {
                var parent         = new FluentCommand(Details.Parent).Resolve(_sesson);
                var collectionName = _sesson.Metadata.GetNavigationPropertyPartnerTypeName(
                    parent.EntityCollection.Name, Details.LinkName);
                entityCollection = _sesson.Metadata.GetEntityCollection(collectionName);
            }
            else
            {
                entityCollection = _sesson.Metadata.GetEntityCollection(Details.CollectionName);
            }

            EntityCollection =
                string.IsNullOrEmpty(Details.DerivedCollectionName)
                                ? entityCollection
                                : _sesson.Metadata.GetDerivedEntityCollection(entityCollection, Details.DerivedCollectionName);
        }
    }
コード例 #2
0
 private void ResolveLinkName(FluentCommandDetails details)
 {
     if (Details.LinkName == null && details.LinkExpression is not null)
     {
         Details.LinkName = details.LinkExpression.AsString(_sesson);
     }
 }
コード例 #3
0
 private void ResolveDerivedCollectionName(FluentCommandDetails details)
 {
     if (Details.DerivedCollectionName == null && details.DerivedCollectionExpression is not null)
     {
         var derivedCollectionName = details.DerivedCollectionExpression.AsString(_sesson);
         Details.DerivedCollectionName = derivedCollectionName;
     }
 }
コード例 #4
0
    internal ResolvedCommand(FluentCommand command, ISession session)
    {
        _sesson = session;
        Details = new FluentCommandDetails(command.Details);

        ResolveCollectionName(command.Details);
        ResolveDerivedCollectionName(command.Details);
        ResolveLinkName(command.Details);
        ResolveEntityCollection(command.Details);
        ResolveKeys(command.Details);
        ResolveFilter(command.Details);
        ResolveEntryData(command.Details);
    }
コード例 #5
0
 private void ResolveCollectionName(FluentCommandDetails details)
 {
     if (Details.CollectionName == null && details.CollectionExpression is not null)
     {
         var collectionName = details.CollectionExpression.AsString(_sesson);
         var items          = collectionName.Split('/');
         if (items.Length > 1)
         {
             Details.CollectionName        = items[0];
             Details.DerivedCollectionName = items[1];
         }
         else
         {
             Details.CollectionName = collectionName;
         }
     }
 }
コード例 #6
0
    private void ResolveKeys(FluentCommandDetails details)
    {
        var namedKeyValues =
            details.KeyValues != null && details.KeyValues.Count == 1 &&
            _sesson.TypeCache.IsAnonymousType(details.KeyValues.First().GetType())
                                ? _sesson.TypeCache.ToDictionary(details.KeyValues.First())
                                : details.NamedKeyValues;

        if (namedKeyValues != null)
        {
            if (NamedKeyValuesMatchAnyKey(namedKeyValues, out var matchingKey, out var isAlternateKey))
            {
                Details.NamedKeyValues = matchingKey.ToDictionary();
                Details.IsAlternateKey = isAlternateKey;
            }
            else
            {
                Details.NamedKeyValues = TryExtractKeyFromNamedValues(namedKeyValues, out var containedKey)
                                        ? containedKey.ToDictionary()
                                        : null;
            }

            Details.KeyValues = null;
        }
コード例 #7
0
 public FluentCommandDetails(FluentCommandDetails details)
 {
     Parent                         = details.Parent;
     CollectionName                 = details.CollectionName;
     CollectionExpression           = details.CollectionExpression;
     DerivedCollectionName          = details.DerivedCollectionName;
     DerivedCollectionExpression    = details.DerivedCollectionExpression;
     DynamicPropertiesContainerName = details.DynamicPropertiesContainerName;
     FunctionName                   = details.FunctionName;
     ActionName                     = details.ActionName;
     IsAlternateKey                 = details.IsAlternateKey;
     KeyValues                      = details.KeyValues;
     NamedKeyValues                 = details.NamedKeyValues;
     EntryValue                     = details.EntryValue;
     EntryData                      = details.EntryData;
     Filter                         = details.Filter;
     FilterExpression               = details.FilterExpression;
     Search                         = details.Search;
     SkipCount                      = details.SkipCount;
     TopCount                       = details.TopCount;
     ExpandAssociations             = details.ExpandAssociations;
     SelectColumns                  = details.SelectColumns;
     OrderbyColumns                 = details.OrderbyColumns;
     ComputeCount                   = details.ComputeCount;
     IncludeCount                   = details.IncludeCount;
     LinkName                       = details.LinkName;
     LinkExpression                 = details.LinkExpression;
     MediaName                      = details.MediaName;
     MediaProperties                = details.MediaProperties;
     QueryOptions                   = details.QueryOptions;
     QueryOptionsKeyValues          = details.QueryOptionsKeyValues;
     QueryOptionsExpression         = details.QueryOptionsExpression;
     BatchEntries                   = details.BatchEntries;
     Headers                        = details.Headers;
     Extensions                     = details.Extensions;
 }
コード例 #8
0
 internal FluentCommand(ResolvedCommand command)
 {
     Details = new FluentCommandDetails(command.Details);
 }
コード例 #9
0
 internal FluentCommand(FluentCommandDetails details)
 {
     Details = new FluentCommandDetails(details);
 }
コード例 #10
0
 internal FluentCommand(FluentCommand parent, ConcurrentDictionary <object, IDictionary <string, object> > batchEntries)
 {
     Details = new FluentCommandDetails(parent?.Details, batchEntries);
 }
コード例 #11
0
 internal ExtendedFluentCommand(FluentCommandDetails details) : base(details)
 {
 }