public void NewsmailInsert(Email entity)
        {
            // Check permission: admin
              PrincipalPermission permAdmin = new PrincipalPermission(Thread.CurrentPrincipal.Identity.Name, "Administrator");
              permAdmin.Demand();

              TraceCallEnterEvent.Raise();
              try
              {
            // Check required fields
            if (entity.ID.IsNull) throw new ArgumentNullException("Email.ID", "A hírlevél azonosítója nincs megadva.");
            if (entity.Subject.Length == 0)
              throw new ArgumentNullException("Email.Subject", "A hírlevél tárgya nincs megadva.");
            if (entity.MailBody.Length == 0)
              throw new ArgumentNullException("Email.MailBody", "A hírlevél szövege nincs megadva.");

            // Save data
            entity.Category = EmailCategory.Newsmail;
            m_DataContext.BeginNestedTran();

            EmailAttachmentService attSrv = new EmailAttachmentService(m_DataContext);

            try
            {
              base.EmailInsert(entity);
              // Files
              foreach (EmailAttachment attach in entity.EmailAttachments.Current)
              {
            attSrv.EmailAttachmentInsert(attach);
              }

              m_DataContext.CommitNested();
            }
            catch
            {
              m_DataContext.RollbackNested();
              throw;
            }
            BusinessAuditEvent.Success(
              new EventParameter("EmailID", entity.ID),
              new EventParameter("EmailSubject", entity.Subject)
              );
            TraceCallReturnEvent.Raise();
            return;
              }
              catch (Exception ex)
              {
            ExceptionManager.Publish(ex);
            BusinessAuditEvent.Fail(
              new EventParameter("Exception", ex.ToString()),
              new EventParameter("EmailID", entity.ID),
              new EventParameter("EmailSubject", entity.Subject)
              );
            TraceCallReturnEvent.Raise(false);
            throw;
              }
        }
        public new void EmailUpdate(Email entity)
        {
            // Check permission: admin
              PrincipalPermission permAdmin = new PrincipalPermission(Thread.CurrentPrincipal.Identity.Name, "Administrator");
              permAdmin.Demand();

              TraceCallEnterEvent.Raise();
              try
              {
            // Check required fields
            if (entity.Subject.Length == 0)
              throw new ArgumentNullException("Email.Subject", "A hírlevél tárgya nincs megadva.");
            if (entity.MailBody.Length == 0)
              throw new ArgumentNullException("Email.MailBody", "A hírlevél szövege nincs megadva.");

            // Logical checks
            Email selected = base.EmailSelect(entity.ID);
            if (selected == null)
              throw new ApplicationException("A megadott azonosítóval nem létezik hírlevél.");
            if (!selected.Category.Equals(EmailCategory.Newsmail))
              throw new ApplicationException("Csak hírlevél kategóriájú levél módosítható.");

            // Save data
            selected.Subject = entity.Subject;
            selected.MailBody = entity.MailBody;
            selected.ActivityAll = entity.ActivityAll;
            selected.ActivityOther = entity.ActivityOther;
            selected.ActivityPrevention = entity.ActivityPrevention;
            selected.ActivityRehabilitation = entity.ActivityRehabilitation;
            selected.ActivityResearch = entity.ActivityResearch;
            selected.ActivityNDI = entity.ActivityNDI;
            selected.To = entity.To;

            EmailAttachmentService attSrv = new EmailAttachmentService(m_DataContext);

            m_DataContext.BeginNestedTran();
            try
            {
              // Clear old files:
              EmailAttachmentContainer oldFiles = base.SelectChildrenByAttachmentOfEmail(entity.ID);
              foreach (EmailAttachment oldFile in oldFiles.All)
              {
            attSrv.EmailAttachmentDelete(oldFile);
              }

              // EmailAttachments - insert:
              foreach (EmailAttachment file in  entity.EmailAttachments.Current)
              {
            attSrv.EmailAttachmentInsert(file);
              }
              base.EmailUpdate(selected);
              m_DataContext.CommitNested();
            }
            catch
            {
              m_DataContext.RollbackNested();
              throw;
            }
            BusinessAuditEvent.Success(
              new EventParameter("EmailID", entity.ID),
              new EventParameter("EmailSubject", entity.Subject)
              );
            TraceCallReturnEvent.Raise();
            return;
              }
              catch (Exception ex)
              {
            ExceptionManager.Publish(ex);
            BusinessAuditEvent.Fail(
              new EventParameter("Exception", ex.ToString()),
              new EventParameter("EmailID", entity.ID),
              new EventParameter("EmailSubject", entity.Subject)
              );
            TraceCallReturnEvent.Raise(false);
            throw;
              }
        }