public override void Joins(JoinCollection joins)
 {
     foreach (Join join in joins)
     {
         Join(@join);
     }
 }
Exemple #2
0
        /// <summary>
        /// Adds multiple child references in a single bulk operation
        /// <para>WARNING: Make sure to save the parent and child Entities before calling this method.</para>
        /// </summary>
        /// <param name="childIDs">The IDs of the child Entities to add.</param>
        /// <param name="session">An optional session if using within a transaction</param>
        /// <param name="cancellation">An optional cancellation token</param>
        public Task AddAsync(IEnumerable <string> childIDs, IClientSessionHandle session = null, CancellationToken cancellation = default)
        {
            parent.ThrowIfUnsaved();

            var models = new List <WriteModel <JoinRecord> >(childIDs.Count());

            foreach (var cid in childIDs)
            {
                cid.ThrowIfUnsaved();

                var parentID = isInverse ? cid : parent.ID;
                var childID  = isInverse ? parent.ID : cid;

                var filter = Builders <JoinRecord> .Filter.Where(
                    j => j.ParentID == parentID &&
                    j.ChildID == childID);

                var update = Builders <JoinRecord> .Update
                             .Set(j => j.ParentID, parentID)
                             .Set(j => j.ChildID, childID);

                models.Add(new UpdateOneModel <JoinRecord>(filter, update)
                {
                    IsUpsert = true
                });
            }

            return(session == null
                   ? JoinCollection.BulkWriteAsync(models, unOrdBlkOpts, cancellation)
                   : JoinCollection.BulkWriteAsync(session, models, unOrdBlkOpts, cancellation));
        }
Exemple #3
0
        public void Adding_single_sql_statement_returns_sql()
        {
            const string   sql            = "left join table a on a.id = b.id";
            JoinCollection joinCollection = new JoinCollection();

            joinCollection.Add(sql);

            joinCollection.Sql().MustBe(sql);
        }
        public QueryTemplate(QueryType type)
        {
            _queryType = type;

            _insertValues = new InsertValueCollection();
            _updateValues = new UpdateValueCollection();
            _joinList = new JoinCollection();
            _criteriaList = new CriteriaCollection();
            _orderList = new OrderCollection();
        }
Exemple #5
0
        public void Supports_multiple_sql_statements()
        {
            const string   joina          = "left join table a on a.id = b.id";
            const string   joinb          = "left join table b on b.id = a.id";
            JoinCollection joinCollection = new JoinCollection();

            joinCollection.Add(joina);
            joinCollection.Add(joinb);

            joinCollection.Sql().MustBe("left join table a on a.id = b.id left join table b on b.id = a.id");
        }
Exemple #6
0
        public override void Joins(JoinCollection joins)
        {
            foreach (Join join in joins)
            {
                if (join.JoinType == JoinType.Right ||
                    join.JoinType == JoinType.FullOuter)
                {
                    throw new QueryBuilderNotImplementedForSqliteException("Percentage not implemented for SQLite");
                }

                Join(@join);
            }
        }
        /// <summary>
        /// Removes child references.
        /// </summary>
        /// <param name="childIDs">The IDs of the child Entities to remove the references of</param>
        /// <param name="session">An optional session if using within a transaction</param>
        /// <param name="cancellation">An optional cancellation token</param>
        public Task RemoveAsync(IEnumerable <string> childIDs, IClientSessionHandle session = null, CancellationToken cancellation = default)
        {
            var filter =
                isInverse
                ? Builders <JoinRecord> .Filter.And(
                    Builders <JoinRecord> .Filter.Eq(j => j.ChildID, parent.ID),
                    Builders <JoinRecord> .Filter.In(j => j.ParentID, childIDs))

                : Builders <JoinRecord> .Filter.And(
                    Builders <JoinRecord> .Filter.Eq(j => j.ParentID, parent.ID),
                    Builders <JoinRecord> .Filter.In(j => j.ChildID, childIDs));

            return(session == null
                   ? JoinCollection.DeleteManyAsync(filter, null, cancellation)
                   : JoinCollection.DeleteManyAsync(session, filter, null, cancellation));
        }
Exemple #8
0
        public ApplicationUser() : base()
        {
            Events = new JoinCollection <Event, UserEvent>(
                UserEvents,
                ue => ue.Event,
                e => new UserEvent {
                User = this, Event = e
            });

            Sessions = new JoinCollection <Session, UserSession>(
                UserSessions,
                us => us.Session,
                s => new UserSession {
                User = this, Session = s
            });
        }
Exemple #9
0
 /// <summary>
 /// An IQueryable of JoinRecords for this relationship
 /// </summary>
 /// <param name="session">An optional session if using within a transaction</param>
 /// <param name="options">An optional AggregateOptions object</param>
 public IMongoQueryable <JoinRecord> JoinQueryable(IClientSessionHandle session = null, AggregateOptions options = null)
 {
     return(session == null
            ? JoinCollection.AsQueryable(options)
            : JoinCollection.AsQueryable(session, options));
 }
Exemple #10
0
 public abstract void Joins(JoinCollection joins);
 /// <summary>
 /// An IAggregateFluent of JoinRecords for this relationship
 /// </summary>
 /// <param name="session">An optional session if using within a transaction</param>
 /// <param name="options">An optional AggregateOptions object</param>
 public IAggregateFluent <JoinRecord> JoinFluent(IClientSessionHandle session = null, AggregateOptions options = null)
 {
     return(session == null
         ? JoinCollection.Aggregate(options)
         : JoinCollection.Aggregate(session, options));
 }