public Docente(string nome, string cognome, string username, string password, DateTime dataNascita, Sede sede) : this(nome, cognome, username, password, dataNascita, sede, new List <Materia>(), new List <Classe>())
 {
 }
        public Studente(string nome, string cognome, string username, string password, DateTime dataNascita, Sede sede, Classe classe) : base(nome, cognome, username, password, dataNascita, sede)
        {
            if (classe.Sede != sede)
            {
                throw new ArgumentException("la classe inserita non appartiene alla sede dello studente");
            }

            voti        = new List <Voto>();
            this.classe = classe;

            using (NpgsqlConnection conn = new NpgsqlConnection(Risorse.StringaDiConnessione))
            {
                conn.Open();
                using (NpgsqlCommand command = new NpgsqlCommand("Insert into studenti (idstudente, idclasse) values (@stu, @clas)", conn))
                {
                    command.Parameters.AddWithValue("stu", matricola);
                    command.Parameters.AddWithValue("clas", classe.Id);
                    command.ExecuteNonQuery();
                }
            }

            classe.Studenti.Add(this);
        }
        public Docente(string nome, string cognome, string username, string password, DateTime dataNascita, Sede sede, List <Materia> materie, List <Classe> classi) : base(nome, cognome, username, password, dataNascita, sede)
        {
            this.materie = materie;
            this.classi  = classi;

            sede.Docenti.Add(this);

            using (NpgsqlConnection conn = new NpgsqlConnection(Risorse.StringaDiConnessione))
            {
                conn.Open();

                using (NpgsqlCommand command = new NpgsqlCommand("Insert into Docenti (iddocente) values(@id)", conn))
                {
                    command.Parameters.AddWithValue("id", matricola);
                    command.ExecuteNonQuery();
                }


                /*
                 * docentiTableAdapter adapter = new docentiTableAdapter();
                 *
                 * adapter.Insert(matricola);
                 *
                 * CompetenzeTableAdapter compAdapter = new CompetenzeTableAdapter();
                 * insegnamentiTableAdapter insAdapter = new insegnamentiTableAdapter();
                 *
                 */

                using (NpgsqlCommand inserimentoClassi = new NpgsqlCommand("Insert into Insegnamenti (iddocente, idclasse) values (@doc, @clas)", conn))
                {
                    foreach (Classe classe in classi)
                    {
                        inserimentoClassi.Parameters.Clear();
                        inserimentoClassi.Parameters.AddWithValue("doc", matricola);
                        inserimentoClassi.Parameters.AddWithValue("clas", classe.Id);
                        inserimentoClassi.Prepare();
                        inserimentoClassi.ExecuteNonQuery();

                        classe.Docenti.Add(this);
                    }
                }

                this.classi = classi;

                using (NpgsqlCommand competenze = new NpgsqlCommand("Insert into Competenze (iddocente, nomemateria) values (@doc, @mat)", conn))
                {
                    foreach (Materia materia in materie)
                    {
                        materia.Docenti.Add(this);
                        competenze.Parameters.Clear();
                        competenze.Parameters.AddWithValue("doc", matricola);
                        competenze.Parameters.AddWithValue("mat", materia.Nome);

                        competenze.Prepare();
                        competenze.ExecuteNonQuery();
                    }
                }

                this.materie = materie;
            }
        }
 public Classe(int anno, string sezione, Sede sede) : this(anno, sezione, sede, new List <Docente>(), new List <Studente>())
 {
 }