/// <summary>
        /// Methode um einem Schulung-Objekt eine GUID und dem Repository dieses Schulung-Objekt hinzuzufügen.
        /// </summary>
        /// <param name="schulung"> hinzuzufügende Schulung </param>
        public async Task <Schulung> AddAsync(Schulung schulung)
        {
            try
            {
                if (schulung.SchulungGUID == null)
                {
                    schulung.SchulungGUID = Guid.NewGuid().ToString();
                }
                if (schulung.AccessToken == null)
                {
                    schulung.AccessToken = Guid.NewGuid().ToString();
                }
                await context.Schulung.AddAsync(schulung);

                await context.SaveChangesAsync();

                return(schulung);
            }
            catch (Exception e)
            {
                Console.Error.Write(e);
                string code = "#005";
                e = new Exception("Fehler beim Anlegen der Schulung in der Datenbank-Schulung (" + e.Message + ") " + code, e);
                throw e;
            }
        }
        /// Setzt das Feld, dass die Mail zum Überprüfen der Anwesenheit versendet wurde
        public async Task SetGeprüftMailSent(String schulungsID, bool reminderSent)
        {
            Schulung schulung = await context.Schulung.FindAsync(schulungsID);

            if (schulung != null)
            {
                schulung.GeprüftReminderSent  = reminderSent;
                context.Entry(schulung).State = EntityState.Modified;
                await context.SaveChangesAsync();
            }
        }
 /// <summary>
 /// Methode um eine Schulung zu löschen.
 /// </summary>
 /// <param name="schulung"> ein Schulung-Objekt </param>
 public async Task DeleteAsync(Schulung schulung)
 {
     try
     {
         context.Schulung.Remove(schulung);
         await context.SaveChangesAsync();
     }
     catch (Exception e)
     {
         string code = "#008";
         e = new Exception("Fehler beim Löschen der Schulung in der Datenbank-Schulung (" + e.Message + ") " + code, e);
         throw e;
     }
 }
        /// <summary>
        /// Methode um eine bestehende Schulung mit einer überarbeiteten Version zu ersetzen.
        /// Die bestehende Version und die Überarbeitete müssen die selbe ID haben.
        /// Wenn die ID null ist passiert nichts.
        /// Wenn die Schulung zu der ID nicht existiert passiert nichts.
        /// </summary>
        /// <param name="schulung"> überarbeitete Version der Schulung </param>
        public async Task UpdateAsync(Schulung schulung)
        {
            try
            {
                Schulung schulungAlt = await context.Schulung
                                       .Include(s => s.Termine)
                                       .Include(s => s.Dozenten)
                                       .SingleAsync(m => m.SchulungGUID == schulung.SchulungGUID);

                schulungAlt.Beschreibung      = schulung.Beschreibung;
                schulungAlt.Anmeldefrist      = schulung.Anmeldefrist;
                schulungAlt.StartAnmeldefrist = schulung.StartAnmeldefrist;
                schulungAlt.Check             = schulung.Check;
                if (!schulungAlt.Dozenten.Equals(schulung.Dozenten))
                {
                    schulungAlt.Dozenten = schulung.Dozenten;
                }
                if (!schulungAlt.Termine.Equals(schulung.Termine))
                {
                    schulungAlt.Termine = schulung.Termine;
                }
                schulungAlt.GeprüftReminderSent    = schulung.GeprüftReminderSent;
                schulungAlt.IsAbgesagt             = schulung.IsAbgesagt;
                schulungAlt.IsGeprüft              = schulung.IsGeprüft;
                schulungAlt.OrganisatorInstitution = schulung.OrganisatorInstitution;
                schulungAlt.Ort   = schulung.Ort;
                schulungAlt.Titel = schulung.Titel;
                // We don't wanna put the access token out there
                // so if it's not present thats ok
                if (schulung.AccessToken != null)
                {
                    schulungAlt.AccessToken = schulung.AccessToken;
                }
                context.Entry(schulungAlt).State = EntityState.Modified;
                await context.SaveChangesAsync();
            }
            catch (Exception e)
            {
                string code = "#007";
                e = new Exception("Fehler beim Update der Schulung in der Datenbank-Schulung (" + e.Message + ") " + code, e);
                throw e;
            }
        }