public new void TemplateUpdate(Template entity)
        {
            PrincipalPermission permAdmin = new PrincipalPermission(Thread.CurrentPrincipal.Identity.Name, "Administrator");
              permAdmin.Demand();

              TraceCallEnterEvent.Raise();
              try
              {
            //check required fields:
            if (entity.ID.IsNull) throw new ArgumentNullException("Template.ID", "A sablon azonosítója nincs megadva.");
            if (entity.Name.Length == 0) throw new ArgumentNullException("Template.Name", "A sablon neve nincs megadva.");
            if (entity.PublicityLevel.IsNull)
              throw new ArgumentNullException("Template.PublicityLevel", "A publikussági szint nincs megadva.");

            if (entity.Details == null)
              throw new ArgumentNullException("Template.Details", "A sablonhoz nincs egyetlen kérdés sem megadva.");
            if (entity.Details.CurrentCount == 0)
              throw new ArgumentNullException("Template.Details", "A sablonhoz nincs egyetlen kérdés sem megadva.");

            string p = PublicityLevel.GetNameById(entity.PublicityLevel.ToString());
            if (p == null)
              throw new ApplicationException("Érvénytelen publikussági szint érték.");

            Template selected = base.TemplateSelect(entity.ID);
            if (selected == null)
              throw new ApplicationException("A megadott azonosítóval nem létezik sablon.");

            // TODO: check pages

            //save data
            m_DataContext.BeginNestedTran();
            try
            {
              TemplateDetailService detailService = new TemplateDetailService(m_DataContext);
              TemplatePageService pageService = new TemplatePageService(m_DataContext);
              TemplateDetailContainer originalDetails = SelectChildrenByDetailOfTemplate(entity.ID);

              base.TemplateUpdate(entity);

              foreach (TemplateDetail detail in entity.Details.Current)
              {
            if (originalDetails[detail.HashString()] != null)
            {
              detailService.TemplateDetailUpdate(detail);
            }
            else
            {
              detailService.TemplateDetailInsert(detail);
            }
              }

              // replace pages:
              base.DeleteChildrenByPageOfTemplate(entity.ID);
              foreach (TemplatePage page in entity.Pages.Current)
              {
            pageService.TemplatePageInsert(page);
              }

              # region feltöltjük a szabadszöveges kereséshez a GlobalSearch táblát

              GlobalSearchService srvGlobalSearch = new GlobalSearchService(m_DataContext);

              DataSet ds = TemplateSelectPendingPrograms(entity.ID);
              DataTable dt = ds.Tables[0];

              foreach (DataRow dr in dt.Rows)
              {
            srvGlobalSearch.SaveProgram(new Guid(dr["uID"].ToString()));
              }

              #endregion

              m_DataContext.CommitNested();
            }
            catch
            {
              m_DataContext.RollbackNested();
              throw;
            }

            BusinessAuditEvent.Success(
              new EventParameter("TemplateID", entity.ID.ToString()),
              new EventParameter("TemplateName", entity.Name.ToString())
              );
            TraceCallReturnEvent.Raise();
            return;
              }
              catch (Exception ex)
              {
            ExceptionManager.Publish(ex);
            BusinessAuditEvent.Fail(
              new EventParameter("Exception", ex.ToString()),
              new EventParameter("TemplateID", entity.ID.ToString()),
              new EventParameter("TemplateName", entity.Name.ToString())
              );
            TraceCallReturnEvent.Raise(false);
            throw;
              }
        }