public ActionResult Create(DonacionesViewModel modelo) { //modelo.donacion.colaboradores = new colaboradores(db.persona.Where(x => x.id == modelo.donacion.idColaborador).First(); if (ModelState.IsValid) { // Se crea la donación en la base de datos. db.donaciones.Add(modelo.donacion); db.SaveChanges(); // Añadir al colaborador en la tabla de colaboradores. /*persona.colaboradores.Add(colaborador); * persona.colaboradores.First().CIF_NIF = modelo.NIF; * persona.colaboradores.First().CuentaBancaria = modelo.cuentaBancaria; * db.Entry(persona).State = EntityState.Modified; * * db.SaveChanges();*/ using (var context = new GestorONGDContext()) { var persona = context.persona.Find(modelo.donacion.idColaborador); var colaborador = new colaboradores(persona, modelo.NIF, modelo.cuentaBancaria); personas_perfiles per_perfiles = new personas_perfiles() { idPersona = modelo.donacion.idColaborador, idPerfil = 2 //personas = colaborador }; /*persona.colaboradores = new HashSet<colaboradores>(); * persona.colaboradores.Add(colaborador);*/ /*var colaborador = new colaboradores() * { * CIF_NIF = modelo.NIF, * CuentaBancaria = modelo.cuentaBancaria * };*/ context.colaboradores.Add(colaborador); context.SaveChanges(); colaborador.idColaborador = modelo.donacion.idColaborador; context.Entry(colaborador).State = EntityState.Modified; context.persona.Remove(persona); context.persona_perfil.Add(per_perfiles); context.SaveChanges(); } //db.Entry(persona).State = EntityState.Detached; /*var existingcolaborador = db.colaboradores.Where(x => x.id == modelo.donacion.idColaborador).FirstOrDefault(); * existingcolaborador.idColaborador = modelo.donacion.idColaborador; * existingcolaborador.CIF_NIF = modelo.NIF; * existingcolaborador.CuentaBancaria = modelo.cuentaBancaria; * db.Entry(existingcolaborador).State = EntityState.Modified; * * // Añadir la relación entre personas y perfiles en la tabla personas_perfiles * var personas_perfiles = new personas_perfiles(0, modelo.donacion.idColaborador, 2); * db.persona_perfil.Add(personas_perfiles); * db.SaveChanges();*/ //TempData["Acierto"] = "La donación creada por el colaborador " + persona.nombre + " " + persona.apellidos + " con un valor de " + modelo.donacion.cantidad + "€ ha sido realizada correctamente"; return(RedirectToAction("Index")); } else { var errors = ModelState.SelectMany(x => x.Value.Errors.Select(z => z.Exception)); Console.Write(errors.ToString()); } // Se listan las personas que no son colaboradores existentes en el sistema puesto que sólo se puede hacer una única donación por usuario. var colaboradores = getColaboradoresSelectList(); ViewBag.idColaborador = colaboradores; ViewBag.idPeriodicidad = new SelectList(db.periodicidades, "id", "nombre", modelo.donacion.idPeriodicidad); return(View(modelo)); }