public override void Remove(LayoutEntity item, bool saveImmediately = true)
        {
            LayoutHtmlService.Remove(m => m.LayoutId == item.ID);
            ZoneService.Remove(m => m.LayoutId == item.ID);
            PageService.Remove(m => m.LayoutId == item.ID);
            var widgets = WidgetService.Get(m => m.LayoutID == item.ID);

            widgets.Each(m =>
            {
                using (var widgetService = WidgetActivator.Create(m))
                {
                    widgetService.DeleteWidget(m.ID);
                }
            });

            MarkChanged(item.ID);
            base.Remove(item, saveImmediately);
        }
        public override void RemoveRange(params LayoutEntity[] items)
        {
            items.Each(layout =>
            {
                LayoutHtmlService.Remove(m => m.LayoutId == layout.ID);
                ZoneService.Remove(m => m.LayoutId == layout.ID);
                PageService.Remove(m => m.LayoutId == layout.ID);
                var widgets = WidgetService.Get(m => m.LayoutID == layout.ID);
                widgets.Each(m =>
                {
                    using (var widgetService = WidgetActivator.Create(m))
                    {
                        widgetService.DeleteWidget(m.ID);
                    }
                });

                MarkChanged(layout.ID);
            });
            base.RemoveRange(items);
        }
        public override void Remove(Expression <Func <LayoutEntity, bool> > filter)
        {
            Get(filter).Each(layout =>
            {
                LayoutHtmlService.Remove(m => m.LayoutId == layout.ID);
                ZoneService.Remove(m => m.LayoutId == layout.ID);
                PageService.Remove(m => m.LayoutId == layout.ID);
                var widgets = WidgetService.Get(m => m.LayoutID == layout.ID);
                widgets.Each(m =>
                {
                    using (var widgetService = WidgetActivator.Create(m))
                    {
                        widgetService.DeleteWidget(m.ID);
                    }
                });

                MarkChanged(layout.ID);
            });
            base.Remove(filter);
        }