/// <summary>
        /// Create a new Entity Set for the specified entities.
        /// </summary>
        /// <remarks>
        /// This method uses a bulk insert to improve performance when creating large Entity Sets.
        /// </remarks>
        /// <param name="name"></param>
        /// <param name="entityTypeId"></param>
        /// <param name="entityIdList"></param>
        /// <param name="expiryMinutes"></param>
        /// <returns></returns>
        public int AddEntitySet(string name, int entityTypeId, IEnumerable <int> entityIdList, int expiryMinutes = 20)
        {
            // Create a new Entity Set.
            var entitySet = new Rock.Model.EntitySet();

            entitySet.Name           = name;
            entitySet.EntityTypeId   = entityTypeId;
            entitySet.ExpireDateTime = RockDateTime.Now.AddMinutes(expiryMinutes);

            Add(entitySet);

            var rockContext = ( RockContext )this.Context;

            rockContext.SaveChanges();

            // Add items to the new Entity Set, using a bulk insert to improve performance.
            if (entityIdList != null &&
                entityIdList.Any())
            {
                var entitySetItems = new List <Rock.Model.EntitySetItem>();

                foreach (var key in entityIdList)
                {
                    var item = new Rock.Model.EntitySetItem();
                    item.EntityId    = key;
                    item.EntitySetId = entitySet.Id;

                    entitySetItems.Add(item);
                }

                rockContext.BulkInsert(entitySetItems);
            }

            return(entitySet.Id);
        }
示例#2
0
        private int? GetPersonEntitySet( EventArgs e)
        {
            OnGridRebind( e );

            var keys = GetPersonData();
            if ( keys.Any() )
            {
                var entitySet = new Rock.Model.EntitySet();
                entitySet.EntityTypeId = Rock.Web.Cache.EntityTypeCache.Read( "Rock.Model.Person" ).Id;
                entitySet.ExpireDateTime = RockDateTime.Now.AddMinutes( 5 );

                foreach ( var key in keys )
                {
                    try
                    {
                        var item = new Rock.Model.EntitySetItem();
                        item.EntityId = (int)key.Key;
                        entitySet.Items.Add( item );
                    }
                    catch { }
                }

                if ( entitySet.Items.Any() )
                {
                    var rockContext = new RockContext();
                    var service = new Rock.Model.EntitySetService( rockContext );
                    service.Add( entitySet );
                    rockContext.SaveChanges();
                    return entitySet.Id;
                }
            }

            return null;
        }