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

              TraceCallEnterEvent.Raise();
              try
              {
            // Check required fields:
            if (entity.Title.Length == 0) throw new ArgumentNullException("News.Title", "A dokumentum címe nincs megadva.");

            // Logical checks
            EDocument selected = EDocumentSelect(entity.ID);
            if (selected == null)
              throw new ApplicationException("A megadott azonosítóval nem létezik dokumentum.");

            if (entity.PictureUrl.Length > 0 && entity.PictureUrl != DBString.Null)
            {
              string ext = Path.GetExtension(entity.PictureUrl).ToLower();
              if (!(ext.Equals(".gif") || ext.Equals(".jpg") || ext.Equals(".jpeg")))
            throw new ApplicationException("Csak jpeg vagy gif formátumú kép csatolható.");
              if (entity.PictureData == null || entity.PictureData.Length == 0)
            throw new ApplicationException("A fájlnévhez nem tartozik adat.");

              if (entity.PictureData != null && entity.PictureData.Length > 0)
              {
            if (entity.PictureUrl.Length == 0)
              throw new ApplicationException("A kép adathoz nem tartozik fájlnév.");
              }
            }

            // Save data
            selected.Title = entity.Title;
            selected.Abstract = entity.Abstract;
            selected.Author = entity.Author;
            selected.CategoryRef = entity.CategoryRef;
            selected.CreatedDate = entity.CreatedDate;
            selected.IsVirtual = entity.IsVirtual;
            selected.LanguageRef = entity.LanguageRef;
            selected.Link = entity.Link;
            selected.SubTypeRef = entity.SubTypeRef;
            selected.Title = entity.Title;
            selected.TypeRef = entity.TypeRef;
            selected.VisibleForRegistered = entity.VisibleForRegistered;
            selected.VisibleForVisitor = entity.VisibleForVisitor;
            selected.ModifiedDate = DateTime.Now;
            selected.Summary = entity.Summary;
            selected.PictureUrl = entity.PictureUrl;

            EDocumentAttachmentsService attSrv = new EDocumentAttachmentsService(m_DataContext);
            EDocumentCommendationService commSrv = new EDocumentCommendationService(m_DataContext);
            EDocumentPublisherService pubSrv = new EDocumentPublisherService(m_DataContext);
            EDocumentPictureService pictureSrv = new EDocumentPictureService(m_DataContext);
            FileDataContext fileDataContext = new FileDataContext();
            m_DataContext.BeginNestedTran();
            try
            {

              // Clear old files:
              EDocumentPictureContainer oldPics = base.SelectChildrenByPictureOfEdocument(entity.ID);
              foreach (EDocumentPicture oldPic in oldPics.All)
              {
            pictureSrv.EDocumentPictureDelete(oldPic);
              }
              // EDocumentPictures
              foreach (EDocumentPicture pic in entity.EDocumentPictures.Current)
              {
            if (pic.PicturePath.Length > 0 && entity.PictureUrl != DBString.Null && entity.PictureData != null && pic.PictureData.Length > 0)
             pictureSrv.EDocumentPictureInsert(pic);
              }

              // Clear old files:
              EDocumentAttachmentsContainer oldFiles = base.SelectChildrenByAttachmentOfEDocument(entity.ID);
              foreach (EDocumentAttachments oldFile in oldFiles.All)
              {
            attSrv.EDocumentAttachmentsDelete(oldFile);
              }

              // EDocumentAttachments - insert:
              foreach (EDocumentAttachments file in  entity.EDocumentAttachments.Current)
              {
            attSrv.EDocumentAttachmentsInsert(file);
              }
              EDocumentCommendationContainer oldComms = base.SelectChildrenByCommendationOfEDocument(entity.ID);

              // Commendation
              foreach (EDocumentCommendation comm in entity.EDocumentCommendations.Current)
              {
            if (oldComms[comm.ID.Value.ToString()] != null)
            {
              commSrv.EDocumentCommendationUpdate(comm);
            }
            else
            {
              commSrv.EDocumentCommendationInsert(comm);
            }
              }
              // Commendation
              foreach (EDocumentCommendation comm in entity.EDocumentCommendations.Deleted)
              {
            commSrv.EDocumentCommendationDelete(comm);
              }

              EDocumentPublisherContainer oldpubs = base.SelectChildrenByPublisherOfEDocument(entity.ID);

              // Publisher
              foreach (EDocumentPublisher pub in entity.EDocumentPublishers.Current)
              {
            if (oldpubs[pub.ID.Value.ToString()] != null)
            {
              pubSrv.EDocumentPublisherUpdate(pub);
            }
            else
            {
              pub.CreatedDate = DateTime.Now;
              pubSrv.EDocumentPublisherInsert(pub);
            }
              }
              // Publisher
              foreach (EDocumentPublisher pub in entity.EDocumentPublishers.Deleted)
              {
            pubSrv.EDocumentPublisherDelete(pub);
              }
              // EDocument
              base.EDocumentUpdate(selected);

              // News base picture update
              fileDataContext.EDocumentDelete(selected.ID);
              if (entity.PictureData != null && entity.PictureData.Length > 0)
              {
            fileDataContext.EDocumentInsert(entity.ID, entity.PictureData);
              }

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

            BusinessAuditEvent.Success(
              new EventParameter("EDocumentID", entity.ID.ToString()),
              new EventParameter("EDocumentTitle", entity.Title)
              );
            TraceCallReturnEvent.Raise();
            return;
              }
              catch (Exception ex)
              {
            ExceptionManager.Publish(ex);
            BusinessAuditEvent.Fail(
              new EventParameter("Exception", ex.ToString()),
              new EventParameter("EDocumentID", entity.ID.ToString()),
              new EventParameter("EDocumentTitle", entity.Title)
              );
            TraceCallReturnEvent.Raise(false);
            throw;
              }
        }
        public new void EDocumentInsert(EDocument entity)
        {
            // check permission: admin
              PrincipalPermission permAdmin = new PrincipalPermission(Thread.CurrentPrincipal.Identity.Name, "Administrator");
              permAdmin.Demand();

              TraceCallEnterEvent.Raise();
              try
              {
            // check required fields:
            if (entity.Title.Length == 0)
              throw new ArgumentNullException("EDocument.Title", "A dokumentum címe nincs megadva.");

            // save data
            entity.CreatedDate = DBDateTime.Now;
            entity.ModifiedDate = DBDateTime.Now;

            // logical checks:
            if (entity.PictureUrl.Length > 0 && entity.PictureUrl != DBString.Null)
            {
              string ext = Path.GetExtension(entity.PictureUrl).ToLower();
              if (!(ext.Equals(".gif") || ext.Equals(".jpg") || ext.Equals("jpeg")))
            throw new ApplicationException("Csak jpeg vagy gif formátumú kép csatolható.");
              if (entity.PictureData == null || entity.PictureData.Length == 0)
            throw new ApplicationException("A fájlnévhez nem tartozik adat.");

            }
            if (entity.PictureData != null && entity.PictureData.Length > 0)
            {
              if (entity.PictureUrl.Length == 0)
            throw new ApplicationException("A kép adathoz nem tartozik fájlnév.");
            }

            EDocumentAttachmentsService attachSrv = new EDocumentAttachmentsService(m_DataContext);
            EDocumentCommendationService commSrv = new EDocumentCommendationService(m_DataContext);
            EDocumentPublisherService pubSrv = new EDocumentPublisherService(m_DataContext);
            EDocumentPictureService pictureSrv = new EDocumentPictureService(m_DataContext);

            m_DataContext.BeginNestedTran();

            try
            {
              // EDocuments
              base.EDocumentInsert(entity);
              EDocumentPictureContainer oldPicts = base.SelectChildrenByPictureOfEdocument(entity.ID);
              foreach (EDocumentPicture oldFile in oldPicts.All)
              {
            pictureSrv.EDocumentPictureDelete(oldFile);
              }

              if (entity.PictureData != null && entity.PictureData.Length > 0)
              {
            FileDataContext fileDataContext = new FileDataContext();
            fileDataContext.EDocumentInsert(entity.ID, entity.PictureData);
              }

              // EDocumentPictures
              foreach (EDocumentPicture pic in entity.EDocumentPictures.Current)
              {
            pictureSrv.EDocumentPictureInsert(pic);
              }
              // Files
              foreach (EDocumentAttachments attach in entity.EDocumentAttachments.Current)
              {
            attachSrv.EDocumentAttachmentsInsert(attach);
              }

              // Commendation
              foreach (EDocumentCommendation comm in entity.EDocumentCommendations.Current)
              {
            commSrv.EDocumentCommendationInsert(comm);
              }

              // Publisher
              foreach (EDocumentPublisher pub in entity.EDocumentPublishers.Current)
              {
            pub.CreatedDate = DateTime.Now;
            pubSrv.EDocumentPublisherInsert(pub);
              }
              m_DataContext.CommitNested();
            }
            catch
            {
              m_DataContext.RollbackNested();
              throw;
            }

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