コード例 #1
0
        private bool ValidateBook(string titulo, string isbn, string isbn_10)
        {
            bool result = false;

            ClearError();
            OMBContext ctx = OMBContext.DB;

            try
            {
                //  TODO incorporar hashing para comparar con la que obtenemos de la tabla
                int cuenta = ctx.Database
                             .SqlQuery <int>("select count(*) from Libros where Titulo = @p0 and ISBN = @p1 and ISBN10 = @p2", titulo, isbn, isbn_10)
                             .FirstOrDefault();

                if (cuenta == 0)
                {
                    result = false;
                }
                else
                {
                    ErrorInfo = "Libro existente";
                }
            }
            catch (Exception ex)
            {
                //  TODO Lanzar excepcion???
                ErrorInfo = "Error al intentar acceder a la tabla de usuarios";
                result    = false;
            }

            return(result);
        }
コード例 #2
0
        public bool AgregarLibro(string titulo, string isbn, string isbn10)
        {
            bool       result = true;
            OMBContext ctx    = OMBContext.DB;
            Libro      Book;

            ClearError();

            Book = ctx.Libros.FirstOrDefault(libro => libro.Titulo == titulo && libro.ISBN == isbn && libro.ISBN10 == isbn10);

            if (Book == null && !ValidateBook(titulo, isbn, isbn10))
            {
                Libro Libro = new Libro();
                Libro.Titulo = titulo;
                Libro.ISBN   = isbn;
                Libro.ISBN10 = isbn10;

                ctx.Libros.Add(Libro);

                ctx.SaveChanges(); // No me deja hacer los cambios
            }
            else
            {
                //ErrorInfo = "Libro existente 2"; //Si es error de Base de datos?
                result = false;
            }

            return(result);
        }
コード例 #3
0
        /// <summary>
        /// Este es el metodo que se llamara desde la UI para concretar el login del Usuario, a partir del ID y de la password
        /// El metodo retorna una instancia de Usuario, con el cual podriamos luego establecer una sesion
        /// </summary>
        /// <param name="login"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        public Usuario LoginUsuario(string login, string password)
        {
            Usuario    usuario;
            OMBContext ctx = OMBContext.DB;

            //  Intentamos obtener los datos del usuario desde EF como hariamos normalmente (puede que no exista!)
            usuario = ctx.Usuarios.FirstOrDefault(usr => usr.Login == login);

            ClearError();

            //  Usar el metodo ValidateUserPasswordInternal para validar la combinacion user/password
            if (usuario != null && ValidateUserPasswordInternal(login, password))
            {
                //  Actualizar los datos de ultimo login correcto o no, guardar cambios!!
                usuario.LastSuccessLogin = DateTime.Now;
                ctx.SaveChanges();
            }
            else
            {
                //  si la combinacion es invalida, setear el error correspondiente y luego intentar actualizar last failed login
                //  este tambien seria un buen momento para incrementar y en cualquier caso bloquear el usuario por reintentos fallidos
                //
                ErrorInfo = "Las credenciales del usuario no son validas";
                if (usuario != null)
                {
                    usuario.LastFailLogin = DateTime.Now;
                    ctx.SaveChanges();

                    usuario = null;
                }
            }
            return(usuario);
        }
コード例 #4
0
        /// <summary>
        /// Este es el caso en que una editorial nos dice que va a publicar un libro nuevo...
        /// O bien el libro ya esta editado pero vamos a realizar una compra para incorporarlo en el stock...
        /// </summary>
        /// <returns></returns>
        public Libro NuevoLibro(Editorial editor, string titulo, string isbn, string isbn10, string portada, DateTime fechaPublicacion, int paginas)
        {
            Libro nuevoLibro = new Libro()
            {
                Titulo           = titulo,
                ISBN             = isbn,
                ISBN10           = isbn10,
                FechaPublicacion = fechaPublicacion,
                Paginas          = paginas,
                Editorial        = editor
            };

            //  obtenemos la imagen de la portada...
            if (portada != null)
            {
                ImageConverter converter = new ImageConverter();
                Bitmap         imagen    = new Bitmap(portada);

                nuevoLibro.Portada = (byte[])converter.ConvertTo(imagen, typeof(byte[]));
            }
            try
            {
                OMBContext ctx = OMBContext.DB;

                ctx.Libros.Add(nuevoLibro);
                ctx.SaveChanges();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Problemas ingresando el nuevo libro");
                Console.WriteLine(ex.ToString());
                nuevoLibro = null;
            }
            return(nuevoLibro);
        }
コード例 #5
0
        public List <Editorial> Get_Editoriales()
        {
            OMBContext       ctx   = OMBContext.DB;
            List <Editorial> lEdit = new List <Editorial>();

            lEdit = ctx.Editoriales.ToList();
            return(lEdit);
        }
コード例 #6
0
        public bool AgregarLibro()
        {
            bool       result = false;
            OMBContext ctx    = OMBContext.DB;
            Libro      lib    = new Libro();

            return(result);
        }
コード例 #7
0
        public ActionResult Agregar(Libro newLibro, HttpPostedFileBase imagen)
        {
            OMBContext ctx           = DB.Contexto;
            string     imgPathFisica = null;

            //  ValidarModelo(newLibro);

            ValidarSoloModelo(newLibro);

            if (ModelState.IsValid)
            {
                try
                {
                    if (imagen != null)
                    {
                        //  seteamos una imagen de no mas de 200K...
                        //
                        if (imagen.ContentLength > 200000)
                        {
                            return(new HttpStatusCodeResult(HttpStatusCode.NotAcceptable, "El tamaño del archivo no debe superar los 200K"));
                        }

                        //  obtenemos la imagen y la guardamos en el directorio fisico del servidor
                        //  tambien guardamos la ruta virtual para almacenarla en la DB
                        //  MapPath() obtiene una ruta fisica a partir de una virtual
                        //
                        string fileName = Path.GetFileName(imagen.FileName); //  el nombre del archivo del cliente

                        imgPathFisica = Path.Combine(Server.MapPath("/Imagenes"), fileName);

                        imagen.SaveAs(imgPathFisica);

                        newLibro.PathImagen = Path.Combine("/Imagenes", fileName);
                    }
                    ctx.Libros.Add(newLibro);
                    ctx.SaveChanges();
                }
                catch (Exception)
                {
                    //  si hubo algun error borramos la imagen
                    //
                    if (imgPathFisica != null)
                    {
                        System.IO.File.Delete(imgPathFisica);
                    }

                    return(new HttpUnauthorizedResult());
                }
                //  Descomentar para probar la validacion, sin tener que guardar en DB. Comentar SaveChanges()
                //  return View("NewLibro", newLibro);

                return(View());
            }
            ViewData.Model = newLibro;
            return(View("NewLibro"));
        }
コード例 #8
0
        public bool AgregarLibro2(Libro libro)
        {
            bool       result = true;
            OMBContext ctx    = OMBContext.DB;

            ClearError();

            ctx.Libros.Add(libro);
            ctx.SaveChanges();

            return(result);
        }
コード例 #9
0
        /// <summary>
        /// Este metodo permite crear un usuario en la DB, usando los datos ingresados desde la UI mas la password
        /// Si no se puede crear, retornamos false y actualiza ErrorInfo
        /// </summary>
        /// <param name="user">Instancia ya creada de Usuario con los datos obligatorios y validos</param>
        /// <param name="pass">Contraseña en </param>
        public bool CrearUsuario(Usuario user, string pass)
        {
            bool       result = true;
            OMBContext ctx    = OMBContext.DB;

            ClearError();
            if (!ValidarUsuario(user))
            {
                ErrorInfo = "No se pudo validar el usuario segun las reglas...";
                result    = false;
            }
            else
            {
                try
                {
                    //  Forzamos que el usuario no pueda hacer nada hasta setear la password...
                    user.Enabled = false;
                    user.Blocked = true;

                    ctx.Usuarios.Add(user);
                    ctx.SaveChanges();

                    if (!ChangeUserPasswordInternal(user.Login, pass))
                    {
                        ErrorInfo = "No se pudo cambiar la password!!! Eliminando el usuario...";

                        ctx.Usuarios.Remove(user);
                        ctx.SaveChanges();

                        result = false;
                    }
                    else
                    {
                        user.Enabled = true;
                        user.Blocked = false;
                        //
                        //  Aca podriamos setear algun token para que el usuario valide su cuenta desde la web
                        //  mas que nada pensando en MVC aunque no se aplicaria tal vez para un usuario interno
                        //  (o sea asociado a un Empleado)
                        //
                        ctx.SaveChanges();
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);

                    result = false;
                }
            }
            return(result);
        }
コード例 #10
0
        /// <summary>
        /// Permite chequear ciertas reglas de negocio respecto a la validez del usuario
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        private bool ValidarUsuario(Usuario user)
        {
            OMBContext ctx     = OMBContext.DB;
            Usuario    Usuario = ctx.Usuarios.FirstOrDefault(us => us.Empleado.Legajo == user.Empleado.Legajo);

            if (Usuario != null)
            {
                return(false);
            }
            //  TODO verificar que el login no este repetido
            //  TODO Asegurar que no se generen dos usuarios para un mismo Empleado
            return(true);
        }
コード例 #11
0
ファイル: TestSeguridad.cs プロジェクト: ethedy/OMB_MVC
        public void IniciarTest()
        {
            SecurityServices serv = new SecurityServices();

            serv.EliminarUsuario("lsimpson");

            //  observar que para cada test creo un contexto fresh....sin entidades residuales
            //  este contexto es diferente del que usa SecurityServices...
            Contexto = new OMBContext();

            //  siempre pongo el lazy load en false, la mayoria de las pruebas lo usa asi
            Contexto.Configuration.LazyLoadingEnabled       = false;
            Contexto.Configuration.AutoDetectChangesEnabled = false;
        }
コード例 #12
0
        public ActionResult AddNew(Libro nuevoLibro, HttpPostedFileBase imagen)
        {
            OMBContext ctx            = DB.Contexto;
            string     imgFileDestino = null;

            //  ValidarModelo(nuevoLibro);

            ValidarModeloSolo(nuevoLibro);

            if (ModelState.IsValid)
            {
                try
                {
                    if (imagen != null)
                    {
                        imgFileDestino = Path.Combine(Server.MapPath("/Imagenes"),
                                                      Path.GetFileName(imagen.FileName));

                        //FileStream dest = System.IO.File.Create(imgFileDestino);

                        imagen.SaveAs(imgFileDestino);

                        nuevoLibro.PathImagen = Path.Combine("/Imagenes",
                                                             Path.GetFileName(imagen.FileName));
                    }

                    ctx.Libros.Add(nuevoLibro);
                    ctx.SaveChanges();

                    return(View("Resultado"));
                }
                catch (Exception ex)
                {
                    if (imgFileDestino != null)
                    {
                        System.IO.File.Delete(imgFileDestino);
                    }

                    return(new HttpUnauthorizedResult());
                }
            }
            else
            {
                return(View("Nuevo", nuevoLibro));
            }
        }
コード例 #13
0
        public List <Editorial> ObtenerListaEditoriales()
        {
            ClearError();

            OMBContext ctx = OMBContext.DB;

            try
            {
                //  TODO
                return(ctx.Editoriales.ToList());
            }
            catch (Exception ex)
            {
                //  TODO
                ErrorInfo = "Error al intentar acceder a la tabla de Editoriales";
                return(null);
            }
        }
コード例 #14
0
        public Editorial ObtenerEditorial(string nombreEdit)
        {
            ClearError();
            OMBContext ctx = OMBContext.DB;
            Editorial  editorial;

            try
            {
                //  TODO
                editorial = ctx.Editoriales.FirstOrDefault(edit => edit.Nombre == nombreEdit);
            }
            catch (Exception ex)
            {
                //  TODO
                ErrorInfo = "Editorial no existente";
                return(null);
            }

            return(editorial);
        }
コード例 #15
0
        /// <summary>
        /// Si la combinacion de login y email coinciden entonces reseteamos la contraseña del usuario y
        /// se la enviamos mediante el implementador de IMessenger (correo, wasap, etc...)
        /// </summary>
        /// <param name="user"></param>
        /// <param name="email"></param>
        public void RecuperarPassword(string user, string email)
        {
            Usuario usuario = null;

#if NO_DB
            Database db = Database.DB;
#else
            OMBContext db = OMBContext.DB;
#endif

            _status = null;

            usuario = db.Usuarios.Find(usr => usr.Login == user && usr.Persona.Email == email);

            if (usuario != null)
            {
                //  llamar a una funcion que obtiene una nueva pass aleatoria
                string newPass = "******";

                Console.WriteLine(">>>> Creada nueva contraseña {0} para {1}", newPass, usuario.Persona.Nombre);

                //  setear contraseña en usuario
                usuario.Password = newPass;

                Console.WriteLine(">>>> Actualizada DB de usuarios con nueva contraseña {0} a {1}", newPass, usuario.Persona.Nombre);

                //  No necesito mas este codigo porque la instancia del usuario ya esta recuperada desde la base de datos
                //
                //Usuario usr = new Usuario(user) { Password = newPass };

                //  Observar que quito toda dependencia de la clase concreta Mailer
                //  Dejo solo el "comportamiento" que debera tener cualquier clase que implemente IMessenger
                //
                //  Mailer mail = new Mailer();
                //  mail.AgregarDestinatario(email);
                //  mail.EnviarMensaje("Su nueva contraseña es qwerty2017");

                _mensajero.EnviarMensaje(string.Format("Su nueva contraseña es {0}", newPass), usuario);
            }
            _status = "Se envio un mail con la informacion solicitada";
        }
コード例 #16
0
        /// <summary>
        /// Este metodo permite crear un usuario en la DB, usando los datos ingresados desde la UI mas la password
        /// Si no se puede crear, retornamos false
        /// </summary>
        /// <param name="user">Instancia ya creada de Usuario con los datos obligatorios y validos</param>
        /// <param name="pass">Contraseña en </param>
        public bool CrearUsuario(Usuario user, string pass)
        {
            bool       result = true;
            OMBContext ctx    = OMBContext.DB;

            try
            {
                //  Forzamos que el usuario no pueda hacer nada hasta setear la password...
                user.Enabled = false;
                user.Blocked = true;

                ctx.Usuarios.Add(user);
                ctx.SaveChanges();

                if (!ChangeUserPasswordInternal(user.Login, pass))
                {
                    Console.WriteLine("No se pudo cambiar la password!!! Eliminando el usuario...");

                    ctx.Usuarios.Remove(user);
                    ctx.SaveChanges();

                    result = false;
                }
                else
                {
                    user.Enabled = true;
                    user.Blocked = false;
                    ctx.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);

                result = false;
            }

            return(result);
        }
コード例 #17
0
        /// <summary>
        /// El metodo Login retorna, o bien un usuario VALIDO o bien null, indicando que existe algun problema
        /// con la autenticacion
        /// Que problema hubo? podemos mostrar un mensaje generico o bien tener un metodo especifico que nos
        /// devuelva el error ocurrido
        /// </summary>
        /// <param name="user"></param>
        /// <param name="pwd"></param>
        /// <returns></returns>
        public Usuario Login(string user, string pwd)
        {
            Usuario result = null;

#if NO_DB
            Database db = Database.DB;
#else
            OMBContext db = OMBContext.DB;
#endif

            result = db.Usuarios.Find(usr => usr.Login == user && usr.Password == pwd);

            if (result == null)
            {
                //  es bueno colocar mensajes ambiguos y que el que ingresa no sepa si se coloco mal el
                //  login o la password
                //  incrementar logins invalidos si el usuario existe
                //
                _status = "Credenciales invalidas, intente nuevamente...";
            }
            return(result);
        }
コード例 #18
0
        /// <summary>
        /// Este es el metodo que se llamara desde la UI para concretar el login del Usuario, a partir del ID y de la password
        /// El metodo retorna una instancia de Usuario, con el cual podriamos luego establecer una sesion
        /// </summary>
        /// <param name="login"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        public Usuario LoginUsuario(string login, string password)
        {
            Usuario    result = null;
            OMBContext ctx    = OMBContext.DB;

            result = ctx.Usuarios.Where(us => us.Login == login).FirstOrDefault();
            if (ValidateUserPasswordInternal(login, password))
            {
                result.LastSuccessLogin = DateTime.Now;
                ctx.SaveChanges();
            }
            else
            {
                result.LastFailLogin = DateTime.Now;
                ctx.SaveChanges();
                result = null;
            }

            //  TODO Usar el metodo ValidateUserPasswordInternal para validar la combinacion user/password
            //  TODO Sabiendo que la combinacion es valida, obtenemos los datos del usuario desde EF como hariamos normalmente
            //  TODO Actualizar los datos de ultimo login correcto o no, guardar cambios!!
            return(result);
        }
コード例 #19
0
        static void Main(string[] args)
        {
            /*
             * En este codigo no nos interesa separar capas, solo testear el funcionamiento de la base de datos y de los diferentes servicios
             * Podemos usar metodos directamente de DbContext o podemos usar las clases que encapsulan EF
             */
            //  https://www.connectionstrings.com/sql-server-compact/
            //
            //  OMBContext ctx = new OMBContext(@"Data source=F:\CURSO_2016_01\master\OMB\db\OMB.sdf;Persist Security Info=False;");
            OMBContext ctx = OMBContext.DB;

            AppDomain.CurrentDomain.UnhandledException += (o, e) => { ctx.Dispose(); Console.WriteLine("Excepcion"); };

            if (ctx.Database.Exists())
            {
                Console.WriteLine("La base esta!");
            }

#if PASO1
            //  PASO 1 - Crear root categoty (Libros)
            //
            Categoria root = new Categoria()
            {
                Nombre = "Libros"
            };

            ctx.Categorias.Add(root);
            ctx.SaveChanges();
#endif



#if PASO2
            //  PASO 2 - Crear categoria hijas (Informatica) [primero obtengo la root y luego creo las child]
            //
            Categoria root = (from cat in ctx.Categorias where cat.Nombre == "Libros" select cat).FirstOrDefault();

            Categoria newCat = new Categoria()
            {
                Nombre = "Informatica", Parent = root
            };

            ctx.Categorias.Add(newCat);
            root?.SubCategorias.Add(newCat);

            newCat = new Categoria()
            {
                Nombre = "Ficcion", Parent = root
            };
            ctx.Categorias.Add(newCat);
            root?.SubCategorias.Add(newCat);


            newCat = new Categoria()
            {
                Nombre = "No Ficcion", Parent = root
            };

            ctx.Categorias.Add(newCat);
            root?.SubCategorias.Add(newCat);

            newCat = new Categoria()
            {
                Nombre = "Autoayuda", Parent = root
            };

            ctx.Categorias.Add(newCat);
            root?.SubCategorias.Add(newCat);

            newCat = new Categoria()
            {
                Nombre = "Viajes", Parent = root
            };

            ctx.Categorias.Add(newCat);
            root?.SubCategorias.Add(newCat);

            ctx.SaveChanges();
#endif

#if PASO2_5
            //  PASO 2 y MEDIO - Crear categorias hijas de una subcategoria...
            //
            Categoria @base = (from cat in ctx.Categorias where cat.Nombre == "Informatica" select cat).FirstOrDefault();

            //  Categoria newCat = new Categoria() { Nombre = "Informatica", Parent = root };
            //  Categoria newCat = new Categoria() { Nombre = "Ficcion", Parent = root };
            Categoria newCat = new Categoria()
            {
                Nombre = "Programacion", Parent = @base
            };

            ctx.Categorias.Add(newCat);
            @base?.SubCategorias.Add(newCat);

            newCat = new Categoria()
            {
                Nombre = "Sistemas Operativos", Parent = @base
            };

            ctx.Categorias.Add(newCat);
            @base?.SubCategorias.Add(newCat);

            newCat = new Categoria()
            {
                Nombre = "Networking", Parent = @base
            };

            ctx.Categorias.Add(newCat);
            @base?.SubCategorias.Add(newCat);

            ctx.SaveChanges();
#endif


#if PASO3
            //  PASO 3 - Chequear relaciones!! FULL

            //  Categoria root = (from cat in ctx.Categorias.Include("SubCategorias") where cat.Nombre == "Libros" select cat).FirstOrDefault();
            //  1
            //Categoria categoria = (from cat in ctx.Categorias where cat.Nombre == "Libros" select cat).FirstOrDefault();
            Categoria categoria = (from cat in ctx.Categorias where cat.Nombre == "Informatica" select cat).FirstOrDefault();

            //  2
            Console.WriteLine($"{categoria.IDCategoria} {categoria.Nombre} {categoria.SubCategorias.Count}");

            Console.WriteLine("SUB-CATEGORIAS");

            foreach (Categoria cat in categoria.SubCategorias)
            {
                //  3
                Console.WriteLine($"{cat.IDCategoria} {cat.Nombre} {cat.SubCategorias.Count}");
            }

            Console.WriteLine("PARENT CATEGORIA");
            if (categoria.Parent == null)
            {
                //  4
                Console.WriteLine($"{categoria.Nombre} es ROOT");
            }
            else
            {
                Console.WriteLine($"La categoria parent de {categoria.Nombre} es {categoria.Parent.Nombre}");
            }
#endif

#if PASO4
            //  PASO 4 - Ingreso de los Tipos de Documentos
            //
            TipoDocumento tipo = new TipoDocumento()
            {
                Descripcion = "DNI"
            };

            ctx.TiposDeDocumento.Add(tipo);

            tipo = new TipoDocumento()
            {
                Descripcion = "Pasaporte", Observaciones = ""
            };
            ctx.TiposDeDocumento.Add(tipo);

            tipo = new TipoDocumento()
            {
                Descripcion = "LE", Observaciones = "Libreta de Enrolamiento - Solo para hombre nacidos antes del 1960"
            };
            ctx.TiposDeDocumento.Add(tipo);

            tipo = new TipoDocumento()
            {
                Descripcion = "LC", Observaciones = "Libreta Civica - Solo para mujeres nacidas antes de 1955"
            };
            ctx.TiposDeDocumento.Add(tipo);

            tipo = new TipoDocumento()
            {
                Descripcion = "Documento Pendiente de Ingreso", Observaciones = "Averiguar cuanto antes el tipo y numero de documento!!"
            };
            ctx.TiposDeDocumento.Add(tipo);

            ctx.SaveChanges();
#endif

#if PASO4_5
            //  PASO 4_5 - testeamos algunas provincias y localidades...
            var localidades = ctx.Localidades.Where(loc => loc.Nombre.Contains("martin"));

            Console.WriteLine("TODAS LAS LOCALIDADES QUE CONTIENEN <<MARTIN>> EN SU NOMBRE\n\n");

            foreach (Localidad city in localidades)
            {
                Console.WriteLine($"Nombre Localidad: {city.Nombre} ; Provincia: {city.Provincia.Nombre}");
            }

            Console.WriteLine($"Hay {localidades.Count()} localidades cuyo nombre contiene <<MARTIN>>");

            Console.WriteLine("\nPress any key para listar ciudades de FORMOSA");
            Console.ReadLine();

            //  observar que hasta aca no necesito tener Provincias como DbSet...

            Provincia formosa = ctx.Provincias.Where(prov => prov.Nombre == "formosa").FirstOrDefault();

            foreach (var city in formosa.Localidades)
            {
                Console.WriteLine($"Nombre Localidad: {city.Nombre} ; Provincia: {city.Provincia.Nombre}");
            }

            Console.WriteLine($"Hay {formosa.Localidades.Count} localidades en esta provincia");
#endif

#if PASO4_5_1
            //
            //  Crear nueva Provincia y nueva Localidad
            //  esto normalmente no se haria, pero vemos si funciona (despues borrar desde la DB)

            Localidad nuevaLocalidad = new Localidad()
            {
                Nombre = "Plumas Verdes"
            };
            Provincia nuevaProvincia = new Provincia()
            {
                IDProvincia = "1", Nombre = "Alaska"
            };

            //  primero podemos probar ingresar una localidad sin provincia

            ctx.Localidades.Add(nuevaLocalidad);
            try
            {
                ctx.SaveChanges();

                throw new ApplicationException("Deberia haber fallado el UPDATE!!!");
            }
            catch (DbUpdateException ex)
            {
                Console.WriteLine("Se genero UpdateException!! Todo funciona OK");
                Console.WriteLine(ex.Message);
            }

            nuevaLocalidad.Provincia = nuevaProvincia;
            ctx.SaveChanges();
#endif

#if PASO5
            //  PASO 5 - Ingreso de algunas personas
            //
            Persona   newPersona;
            Localidad rosario, perez;

            rosario = ctx.Localidades.Where(loc => loc.Nombre == "Rosario" && loc.Provincia.Nombre == "Santa Fe").FirstOrDefault();
            perez   = ctx.Localidades.Where(loc => loc.Nombre == "Perez" && loc.Provincia.Nombre == "Santa Fe").FirstOrDefault();


            newPersona = new Persona()
            {
                Nombres = "Martin", Apellidos = "Vidal", Localidad = rosario, Sexo = Sexo.Masculino
            };
            ctx.Personas.Add(newPersona);

            newPersona = new Persona()
            {
                Nombres = "Gonzalo", Apellidos = "López", Localidad = rosario, Sexo = Sexo.Masculino
            };
            ctx.Personas.Add(newPersona);

            newPersona = new Persona()
            {
                Nombres = "Ruben", Apellidos = "Acevedo", Localidad = rosario, Sexo = Sexo.Masculino
            };
            ctx.Personas.Add(newPersona);

            newPersona = new Persona()
            {
                Nombres       = "Enrique",
                Apellidos     = "Thedy",
                Localidad     = rosario,
                Domicilio     = "Mitre 509 Piso 5 Departamento 4",
                CodigoPostal  = "S2000COK",
                Documento     = "18339577",
                TipoDocumento = ctx.TiposDeDocumento.FirstOrDefault(td => td.Descripcion == "DNI"),
                Sexo          = Sexo.Masculino
            };
            ctx.Personas.Add(newPersona);

            newPersona = new Persona()
            {
                Nombres = "Ana Laura", Apellidos = "Cardoso", Localidad = rosario, Sexo = Sexo.Femenino
            };
            ctx.Personas.Add(newPersona);

            newPersona = new Persona()
            {
                Nombres = "Maria Elisa", Apellidos = "Tron", Localidad = rosario, Sexo = Sexo.Femenino
            };
            ctx.Personas.Add(newPersona);

            newPersona = new Persona()
            {
                Nombres = "Valeria Claudia", Apellidos = "Guglielmetti", Localidad = rosario, Sexo = Sexo.Femenino
            };
            ctx.Personas.Add(newPersona);

            newPersona = new Persona()
            {
                Nombres = "Guillermo", Apellidos = "Quintana", Localidad = rosario, Sexo = Sexo.Masculino
            };
            ctx.Personas.Add(newPersona);

            newPersona = new Persona()
            {
                Nombres = "Irene Leonor", Apellidos = "Acosta", Localidad = perez, Sexo = Sexo.Femenino
            };
            ctx.Personas.Add(newPersona);

            //  newPersona = new Persona() { Nombres = "", Apellidos = "", Localidad = rosario };

            ctx.SaveChanges();
#endif

#if PASO6
            //  Agregamos info de contacto
            //
            Persona             persona = null; //  TODO Traer una Persona desde la base de datos
            List <TipoContacto> tipos   = ctx.TiposContacto.ToList();

            if (persona != null)
            {
                Console.WriteLine($"Agregar contactos para {persona.Nombres} {persona.Apellidos}");

                while (true)
                {
                    Console.WriteLine("(A)gregar nuevo contacto? o (S)alir?");
                    if (Console.ReadKey(true).Key == ConsoleKey.A)
                    {
                        //  mostrar la lista de posibles contactos
                        Console.WriteLine("Esta es la lista de posibles tipos de contacto\nElegir un # de tipo y luego ingresarlo");

                        for (int idx = 1; idx <= tipos.Count; idx++)
                        {
                            Console.WriteLine($"{idx} ----- {tipos[idx-1].Descripcion}");
                        }

                        string opcion = Console.ReadLine();
                        int    numOpcion;

                        if (Int32.TryParse(opcion, out numOpcion) && numOpcion >= 1 && numOpcion <= tipos.Count)
                        {
                            Console.WriteLine("Ahora ingrese el dato del contacto");

                            string dato = Console.ReadLine();

                            Console.WriteLine("Por ultimo un comentario (o Enter si no desea comentario)");

                            string comentario = Console.ReadLine();

                            //  TODO Agregar el nuevo contacto a la Persona
                        }
                        else
                        {
                            Console.WriteLine($"Opcion no valida, debe estar entre 1 y {tipos.Count}");
                        }
                    }
                    else
                    {
                        break;
                    }
                }
                if (ctx.ChangeTracker.HasChanges())
                {
                    Console.WriteLine("Guardando info de contacto");
                    //  ctx.MostrarCambios();
                    //  Console.ReadLine();
                    ctx.SaveChanges();
                }
                else
                {
                    Console.WriteLine("No se detectaron cambios");
                }
            }
            else
            {
                Console.WriteLine("Esta persona no existe");
            }
#endif

#if PASO7
            //  Agregamos Empleado asociado a Persona
            //
            Persona persona = ctx.Personas.FirstOrDefault(per => per.Apellidos == "Thedy");

            if (persona != null)
            {
                Empleado nuevo = new Empleado();

                nuevo.Persona      = persona;
                nuevo.Legajo       = "167055";
                nuevo.CUIT         = "20-18339577-8";
                nuevo.FechaIngreso = new DateTime(1986, 12, 9);

                ctx.Empleados.Add(nuevo);
                ctx.SaveChanges();
            }
#endif

#if PASO8
            //  Creamos un usuario y utilizamos el servicio para crearlo con su password
            //
            Empleado         empleado = ctx.Empleados.FirstOrDefault(emp => emp.Legajo == "167055");
            Usuario          user     = new Usuario();
            SecurityServices seg      = new SecurityServices();

            user.Login    = "******";
            user.Empleado = empleado;
            user.Blocked  = false;

            if (seg.ValidarUsuario(user))
            {
                if (seg.CrearUsuario(user, "12345678"))
                {
                    Console.WriteLine("Usuario creado correctamente");
                }
                else
                {
                    Console.WriteLine("Error al crear el usuario");
                }
            }
            else
            {
                Console.WriteLine("Fallo la validacion del usuario");
            }
#endif

            /*
             *    Categoria newCat = new Categoria() {Nombre = "Informatica", Parent = parent};
             *
             *    ctx.Categorias.Add(newCat);
             *
             *    parent.SubCategorias.Add(newCat);
             *    ctx.SaveChanges();
             *
             *
             *    //  ctx.Categorias.Load();
             *
             *    var showCat = ctx.Categorias.FirstOrDefault();
             *
             *      //.Where(categ => categ.Nombre == "Libros").First();
             *
             *    Console.WriteLine(showCat?.CategoriaID.ToString());
             */
            Console.ReadLine();

            ctx.Dispose();
        }
コード例 #20
0
        static void Main(string[] args)
        {
#if NO_DB
            ServiciosSeguridad seg = new ServiciosSeguridad(new NullMessenger());
            Usuario            user;

            //  intentamos el login de un usuario y/o password inexistentes
            user = seg.Login("pirulo", "1234");

            if (user == null)
            {
                Console.WriteLine(seg.Status());
            }
            else
            {
                Console.WriteLine("Usuario/password correctas");
            }

            //  luego de un usuario y password correctos
            user = seg.Login("sara", "1234");
            if (user == null)
            {
                Console.WriteLine(seg.Status());
            }
            else
            {
                Console.WriteLine("Usuario/password correctas");
            }

            //  intentamos recuperar una contraseña
            seg.RecuperarPassword("sara", "*****@*****.**");

            //  PROBAR QUE LA CONTRASELÑA CAMBIO
#else
            OMBContext ctx = OMBContext.DB;

            AppDomain.CurrentDomain.UnhandledException += (o, e) => { ctx.Dispose(); Console.WriteLine("Excepcion"); };

            if (ctx.Database.Exists())
            {
                Console.WriteLine("La base esta!");
            }
#endif



#if PASO_5
            //  PASO 5 - Ingreso de algunas personas
            //
            Persona   newPersona;
            Localidad rosario, perez;

            rosario = ctx.Localidades.Where(loc => loc.Nombre == "Rosario" && loc.Provincia.Nombre == "Santa Fe").FirstOrDefault();
            perez   = ctx.Localidades.Where(loc => loc.Nombre == "Perez" && loc.Provincia.Nombre == "Santa Fe").FirstOrDefault();


            newPersona = new Persona()
            {
                Nombre        = "Enrique Thedy",
                Localidad     = rosario,
                Domicilio     = "Mitre 509 Piso 5 Departamento 4",
                CodigoPostal  = "S2000COK",
                Documento     = "18339577",
                TipoDocumento = ctx.TiposDeDocumento.FirstOrDefault(td => td.Descripcion == "DNI"),
                Nacimiento    = new DateTime(1967, 4, 10),
                Sexo          = Sexo.Masculino
            };
            ctx.Personas.Add(newPersona);

            //  newPersona = new Persona() { Nombres = "", Apellidos = "", Localidad = rosario };

            ctx.SaveChanges();
#endif

            Console.ReadLine();
        }
コード例 #21
0
        static void Main(string[] args)
        {
            /*
             * En este codigo no nos interesa separar capas, solo testear el funcionamiento de la base de datos y de los diferentes servicios
             * Podemos usar metodos directamente de DbContext o podemos usar las clases que encapsulan EF
             */
            //  https://www.connectionstrings.com/sql-server-compact/
            //
            //  OMBContext ctx = new OMBContext(@"Data source=F:\CURSO_2016_01\master\OMB\db\OMB.sdf;Persist Security Info=False;");
            OMBContext ctx = OMBContext.DB;

            AppDomain.CurrentDomain.UnhandledException += (o, e) => { ctx.Dispose(); Console.WriteLine("Excepcion"); };

            if (ctx.Database.Exists())
            {
                Console.WriteLine("La base esta!");
            }

#if PASO_1
            //  PASO 1 - Crear root categoty (Libros)
            //
            Categoria root = new Categoria()
            {
                Nombre = "Libros"
            };

            ctx.Categorias.Add(root);
            ctx.SaveChanges();
#endif



#if PASO_2
            //  PASO 2 - Crear categoria hijas (Informatica) [primero obtengo la root y luego creo las child]
            //
            Categoria root = (from cat in ctx.Categorias where cat.Nombre == "Libros" select cat).FirstOrDefault();

            Categoria newCat = new Categoria()
            {
                Nombre = "Informatica", Parent = root
            };

            ctx.Categorias.Add(newCat);
            root?.SubCategorias.Add(newCat);

            newCat = new Categoria()
            {
                Nombre = "Ficcion", Parent = root
            };
            ctx.Categorias.Add(newCat);
            root?.SubCategorias.Add(newCat);


            newCat = new Categoria()
            {
                Nombre = "No Ficcion", Parent = root
            };

            ctx.Categorias.Add(newCat);
            root?.SubCategorias.Add(newCat);

            newCat = new Categoria()
            {
                Nombre = "Autoayuda", Parent = root
            };

            ctx.Categorias.Add(newCat);
            root?.SubCategorias.Add(newCat);

            newCat = new Categoria()
            {
                Nombre = "Viajes", Parent = root
            };

            ctx.Categorias.Add(newCat);
            root?.SubCategorias.Add(newCat);

            ctx.SaveChanges();
#endif

#if PASO_2_5
            //  PASO 2 y MEDIO - Crear categorias hijas de una subcategoria...
            //
            Categoria @base = (from cat in ctx.Categorias where cat.Nombre == "Informatica" select cat).FirstOrDefault();

            //  Categoria newCat = new Categoria() { Nombre = "Informatica", Parent = root };
            //  Categoria newCat = new Categoria() { Nombre = "Ficcion", Parent = root };
            Categoria newCat = new Categoria()
            {
                Nombre = "Programacion", Parent = @base
            };

            ctx.Categorias.Add(newCat);
            @base?.SubCategorias.Add(newCat);

            newCat = new Categoria()
            {
                Nombre = "Sistemas Operativos", Parent = @base
            };

            ctx.Categorias.Add(newCat);
            @base?.SubCategorias.Add(newCat);

            newCat = new Categoria()
            {
                Nombre = "Networking", Parent = @base
            };

            ctx.Categorias.Add(newCat);
            @base?.SubCategorias.Add(newCat);

            ctx.SaveChanges();
#endif


#if PASO_3
            //  PASO 3 - Chequear relaciones!! FULL

            //  Categoria root = (from cat in ctx.Categorias.Include("SubCategorias") where cat.Nombre == "Libros" select cat).FirstOrDefault();
            //  1
            //Categoria categoria = (from cat in ctx.Categorias where cat.Nombre == "Libros" select cat).FirstOrDefault();
            Categoria categoria = (from cat in ctx.Categorias where cat.Nombre == "Informatica" select cat).FirstOrDefault();

            //  2
            Console.WriteLine($"{categoria.IDCategoria} {categoria.Nombre} {categoria.SubCategorias.Count}");

            Console.WriteLine("SUB-CATEGORIAS");

            foreach (Categoria cat in categoria.SubCategorias)
            {
                //  3
                Console.WriteLine($"{cat.IDCategoria} {cat.Nombre} {cat.SubCategorias.Count}");
            }

            Console.WriteLine("PARENT CATEGORIA");
            if (categoria.Parent == null)
            {
                //  4
                Console.WriteLine($"{categoria.Nombre} es ROOT");
            }
            else
            {
                Console.WriteLine($"La categoria parent de {categoria.Nombre} es {categoria.Parent.Nombre}");
            }
#endif

#if PASO_4
            //  PASO 4 - Ingreso de los Tipos de Documentos
            //
            TipoDocumento tipo = new TipoDocumento()
            {
                Descripcion = "DNI"
            };

            ctx.TiposDeDocumento.Add(tipo);

            tipo = new TipoDocumento()
            {
                Descripcion = "Pasaporte", Observaciones = ""
            };
            ctx.TiposDeDocumento.Add(tipo);

            tipo = new TipoDocumento()
            {
                Descripcion = "LE", Observaciones = "Libreta de Enrolamiento - Solo para hombre nacidos antes del 1960"
            };
            ctx.TiposDeDocumento.Add(tipo);

            tipo = new TipoDocumento()
            {
                Descripcion = "LC", Observaciones = "Libreta Civica - Solo para mujeres nacidas antes de 1955"
            };
            ctx.TiposDeDocumento.Add(tipo);

            tipo = new TipoDocumento()
            {
                Descripcion = "Documento Pendiente de Ingreso", Observaciones = "Averiguar cuanto antes el tipo y numero de documento!!"
            };
            ctx.TiposDeDocumento.Add(tipo);

            ctx.SaveChanges();
#endif

#if PASO_4_5
            //  PASO 4_5 - testeamos algunas provincias y localidades...
            var localidades = ctx.Localidades.Where(loc => loc.Nombre.Contains("martin"));

            Console.WriteLine("TODAS LAS LOCALIDADES QUE CONTIENEN <<MARTIN>> EN SU NOMBRE\n\n");

            foreach (Localidad city in localidades)
            {
                Console.WriteLine($"Nombre Localidad: {city.Nombre} ; Provincia: {city.Provincia.Nombre}");
            }

            Console.WriteLine($"Hay {localidades.Count()} localidades cuyo nombre contiene <<MARTIN>>");

            Console.WriteLine("\nPress any key para listar ciudades de FORMOSA");
            Console.ReadLine();

            //  observar que hasta aca no necesito tener Provincias como DbSet...

            Provincia formosa = ctx.Provincias.Where(prov => prov.Nombre == "formosa").FirstOrDefault();

            foreach (var city in formosa.Localidades)
            {
                Console.WriteLine($"Nombre Localidad: {city.Nombre} ; Provincia: {city.Provincia.Nombre}");
            }

            Console.WriteLine($"Hay {formosa.Localidades.Count} localidades en esta provincia");
#endif

#if PASO_4_5_1
            //
            //  Crear nueva Provincia y nueva Localidad
            //  esto normalmente no se haria, pero vemos si funciona (despues borrar desde la DB)

            Localidad nuevaLocalidad = new Localidad()
            {
                Nombre = "Plumas Verdes"
            };
            Provincia nuevaProvincia = new Provincia()
            {
                IDProvincia = "1", Nombre = "Alaska"
            };

            //  primero podemos probar ingresar una localidad sin provincia

            ctx.Localidades.Add(nuevaLocalidad);
            try
            {
                ctx.SaveChanges();

                throw new ApplicationException("Deberia haber fallado el UPDATE!!!");
            }
            catch (DbUpdateException ex)
            {
                Console.WriteLine("Se genero UpdateException!! Todo funciona OK");
                Console.WriteLine(ex.Message);
            }

            nuevaLocalidad.Provincia = nuevaProvincia;
            ctx.SaveChanges();
#endif

#if PASO_5
            //  PASO 5 - Ingreso de algunas personas
            //
            Persona   newPersona;
            Localidad rosario, perez;

            rosario = ctx.Localidades.Where(loc => loc.Nombre == "Rosario" && loc.Provincia.Nombre == "Santa Fe").FirstOrDefault();
            perez   = ctx.Localidades.Where(loc => loc.Nombre == "Perez" && loc.Provincia.Nombre == "Santa Fe").FirstOrDefault();


            newPersona = new Persona()
            {
                Nombres = "Martin", Apellidos = "Vidal", Localidad = rosario, Sexo = Sexo.Masculino
            };
            ctx.Personas.Add(newPersona);

            newPersona = new Persona()
            {
                Nombres = "Gonzalo", Apellidos = "López", Localidad = rosario, Sexo = Sexo.Masculino
            };
            ctx.Personas.Add(newPersona);

            newPersona = new Persona()
            {
                Nombres = "Ruben", Apellidos = "Acevedo", Localidad = rosario, Sexo = Sexo.Masculino
            };
            ctx.Personas.Add(newPersona);

            newPersona = new Persona()
            {
                Nombres       = "Enrique",
                Apellidos     = "Thedy",
                Localidad     = rosario,
                Domicilio     = "Mitre 509 Piso 5 Departamento 4",
                CodigoPostal  = "S2000COK",
                Documento     = "18339577",
                TipoDocumento = ctx.TiposDeDocumento.FirstOrDefault(td => td.Descripcion == "DNI"),
                Sexo          = Sexo.Masculino
            };
            ctx.Personas.Add(newPersona);

            newPersona = new Persona()
            {
                Nombres = "Ana Laura", Apellidos = "Cardoso", Localidad = rosario, Sexo = Sexo.Femenino
            };
            ctx.Personas.Add(newPersona);

            newPersona = new Persona()
            {
                Nombres = "Maria Elisa", Apellidos = "Tron", Localidad = rosario, Sexo = Sexo.Femenino
            };
            ctx.Personas.Add(newPersona);

            newPersona = new Persona()
            {
                Nombres = "Valeria Claudia", Apellidos = "Guglielmetti", Localidad = rosario, Sexo = Sexo.Femenino
            };
            ctx.Personas.Add(newPersona);

            newPersona = new Persona()
            {
                Nombres = "Guillermo", Apellidos = "Quintana", Localidad = rosario, Sexo = Sexo.Masculino
            };
            ctx.Personas.Add(newPersona);

            newPersona = new Persona()
            {
                Nombres = "Irene Leonor", Apellidos = "Acosta", Localidad = perez, Sexo = Sexo.Femenino
            };
            ctx.Personas.Add(newPersona);

            //  newPersona = new Persona() { Nombres = "", Apellidos = "", Localidad = rosario };

            ctx.SaveChanges();
#endif

#if PASO_5_5
            //  Modificar propiedades de alguna persona
            Persona persona = ctx.Personas.Where(per => per.Apellidos == "Thedy").First();

            persona.AmpliacionDomicilio = "Es el edificio de la esquina";

            if (ctx.ChangeTracker.HasChanges())
            {
                Console.WriteLine("Guardando info de contacto");

                ctx.MostrarCambios();
                Console.ReadLine();

                ctx.SaveChanges();
            }
            else
            {
                Console.WriteLine("No se detectaron cambios");
            }
#endif

#if PASO_6
            //  Agregamos info de contacto
            //
            //  TODO Traer una Persona desde la base de datos
            Persona             persona = ctx.Personas.Where(per => per.Apellidos == "Thedy").FirstOrDefault();
            List <TipoContacto> tipos   = ctx.TiposContacto.ToList();

            if (persona != null)
            {
                Console.WriteLine($"Agregar contactos para {persona.Nombres} {persona.Apellidos}");

                while (true)
                {
                    Console.WriteLine("(A)gregar nuevo contacto? o (S)alir?");
                    if (Console.ReadKey(true).Key == ConsoleKey.A)
                    {
                        //  mostrar la lista de posibles contactos
                        Console.WriteLine("Esta es la lista de posibles tipos de contacto\nElegir un # de tipo y luego ingresarlo");

                        for (int idx = 1; idx <= tipos.Count; idx++)
                        {
                            Console.WriteLine($"{idx} ----- {tipos[idx-1].Descripcion}");
                        }

                        string opcion = Console.ReadLine();
                        int    numOpcion;

                        if (Int32.TryParse(opcion, out numOpcion) && numOpcion >= 1 && numOpcion <= tipos.Count)
                        {
                            Console.WriteLine("Ahora ingrese el dato del contacto");

                            string dato = Console.ReadLine();

                            Console.WriteLine("Por ultimo un comentario (o Enter si no desea comentario)");

                            string comentario = Console.ReadLine();

                            //  TODO Agregar el nuevo contacto a la Persona
                            Contacto nuevoContacto = new Contacto();

                            nuevoContacto.Dato       = dato;
                            nuevoContacto.Comentario = string.IsNullOrWhiteSpace(comentario) ? null : comentario;
                            nuevoContacto.Tipo       = tipos[numOpcion];

                            persona.InfoContacto.Add(nuevoContacto);
                        }
                        else
                        {
                            Console.WriteLine($"Opcion no valida, debe estar entre 1 y {tipos.Count}");
                        }
                    }
                    else
                    {
                        break;
                    }
                }
                if (ctx.ChangeTracker.HasChanges())
                {
                    Console.WriteLine("Guardando info de contacto");

                    ctx.MostrarCambios();
                    Console.ReadLine();

                    ctx.SaveChanges();
                }
                else
                {
                    Console.WriteLine("No se detectaron cambios");
                }
            }
            else
            {
                Console.WriteLine("Esta persona no existe");
            }
#endif

#if PASO_7
            //  Agregamos Empleado asociado a Persona
            //
            Persona persona = ctx.Personas.FirstOrDefault(per => per.Apellidos == "Thedy");

            if (persona != null)
            {
                Empleado nuevo = new Empleado();

                nuevo.Persona      = persona;
                nuevo.Legajo       = "167055";
                nuevo.CUIT         = "20-18339577-8";
                nuevo.FechaIngreso = new DateTime(1986, 12, 9);

                ctx.Empleados.Add(nuevo);
                ctx.SaveChanges();
            }
#endif

#if PASO_8
            //  Creamos un usuario y utilizamos el servicio para crearlo con su password
            //
            Empleado         empleado = ctx.Empleados.FirstOrDefault(emp => emp.Legajo == "167055");
            Usuario          user     = new Usuario();
            SecurityServices seg      = new SecurityServices();

            user.Login    = "******";
            user.Empleado = empleado;
            user.Blocked  = false;

            if (seg.CrearUsuario(user, "12345678"))
            {
                Console.WriteLine("Usuario creado correctamente");
            }
            else
            {
                Console.WriteLine("Error al crear el usuario");
            }
#endif

#if PASO_9
            //  TODO agregar codigo para ingresar con el ID y password que asignamos a nuestro usuario
            //
            SecurityServices seg = new SecurityServices();

            //  Probamos login incorrecto...por usuario inexistente
            //
            Usuario usrlogin = seg.LoginUsuario("pirulo", "12345678");

            if (usrlogin == null)
            {
                Console.WriteLine(seg.ErrorInfo);
            }
            else
            {
                Console.WriteLine("NO PUEDE SER!!!");
            }
            //  Probamos login incorrecto...por password incorrecta ==> esto tiene que modificar la tabla (last login BAD))
            //
            usrlogin = seg.LoginUsuario("ethedy", "1234567890");

            if (usrlogin == null)
            {
                Console.WriteLine(seg.ErrorInfo);
            }
            else
            {
                Console.WriteLine("NO PUEDE SER!!!");
            }

            //  Probamos login incorrecto...por password incorrecta ==> esto tiene que modificar la tabla (last login OK)
            //
            usrlogin = seg.LoginUsuario("ethedy", "12345678");

            if (usrlogin != null)
            {
                Console.WriteLine($"Usuario {usrlogin.Empleado.Persona.Nombres} {usrlogin.Empleado.Persona.Apellidos} conectado!!");
            }
            else
            {
                Console.WriteLine("NO PUEDE SER!!!");
            }
#endif

#if PASO_12
            //  Agregamos codigo para incorporar editoriales y algunos libros
            //  string pathPortadas = @"F:\CURSO_2016_01\src\OMB\imagenes\portadas";
            //  string pathPortadas = @"F:\CURSO_2016_01\src\OMB\imagenes\portadas";
            string[] editoriales =
            {
                // "Addison-Wesley Professional",
                "The MIT Press",
                "O'Reilly Media",
                "No Starch Press",
                "Apress",
                "Microsoft Press",
                "Wrox",
                "McGraw-Hill Education",
                "Wiley"
            };

            Editorial editorial;
            //  ProductServices prods = new ProductServices();

            foreach (string item in editoriales)
            {
                editorial = new Editorial()
                {
                    Nombre = item
                };
                ctx.Editoriales.Add(editorial);
            }
            ctx.SaveChanges();

/*
 *    Libro nuevo = prods.NuevoLibro(editorial,
 *      "The C++ Standard Library: A Tutorial and Reference", "9780321623218",
 *      Path.Combine(pathPortadas, "The C++ Standard Library A Tutorial and Reference.jpg"),
 *      new DateTime(2012, 4, 9), 1128);
 *
 *    if (nuevo != null)
 *      Console.WriteLine($"Libro agregado correctamente con ID = {nuevo.IDLibro}");
 * */
#endif

#if PASO_13
            //  Agregamos codigo para incorporar editoriales y algunos libros
            //  string pathPortadas = @"F:\CURSO_2016_01\src\OMB\imagenes\portadas";
            string pathPortadas = @"D:\DESARROLLO\OMB_2016\OMB\imagenes\portadas";

            ProductServices prods = new ProductServices();
            Libro           nuevo;

            nuevo = prods.NuevoLibro(
                ctx.Editoriales.FirstOrDefault(ed => ed.Nombre.Contains("Wesley")),
                "The C++ Standard Library: A Tutorial and Reference",
                "9780321623218",
                "0321623215",
                Path.Combine(pathPortadas, "The C++ Standard Library A Tutorial and Reference.jpg"),
                new DateTime(2012, 4, 9),
                1128);

            if (nuevo != null)
            {
                Console.WriteLine("Libro agregado correctamente con ID = {0}", nuevo.IDLibro);
            }

            nuevo = prods.NuevoLibro(
                ctx.Editoriales.FirstOrDefault(ed => ed.Nombre.Contains("MIT Press")),
                "Introduction to Algorithms",
                "9780262033848",
                "0262033844",
                Path.Combine(pathPortadas, "Introduction to Algorithms.jpg"),
                new DateTime(2009, 7, 31),
                1312);

            if (nuevo != null)
            {
                Console.WriteLine("Libro agregado correctamente con ID = {0}", nuevo.IDLibro);
            }

            nuevo = prods.NuevoLibro(
                ctx.Editoriales.FirstOrDefault(ed => ed.Nombre.Contains("Reilly")),
                "Algorithms in a Nutshell: A Practical Guide",
                "9781491948927",
                "1491948922",
                Path.Combine(pathPortadas, "Algorithms in a Nutshell A Practical Guide.jpg"),
                new DateTime(2016, 4, 2),
                390);

            if (nuevo != null)
            {
                Console.WriteLine("Libro agregado correctamente con ID = {0}", nuevo.IDLibro);
            }

            nuevo = prods.NuevoLibro(
                ctx.Editoriales.FirstOrDefault(ed => ed.Nombre.Contains("Reilly")),
                "The Hitchhiker's Guide to Python: Best Practices for Development",
                "9781491933176",
                "1491933178",
                Path.Combine(pathPortadas, "The Hitchhiker's Guide to Python Best Practices for Development.jpg"),
                new DateTime(2016, 9, 18),
                338);

            if (nuevo != null)
            {
                Console.WriteLine("Libro agregado correctamente con ID = {0}", nuevo.IDLibro);
            }

            nuevo = prods.NuevoLibro(
                ctx.Editoriales.FirstOrDefault(ed => ed.Nombre.Contains("Reilly")),
                "Understanding the Linux Kernel",
                "9780596005658",
                "0596005652",
                Path.Combine(pathPortadas, "Understanding the Linux Kernel.jpg"),
                new DateTime(2005, 11, 1),
                944);

            if (nuevo != null)
            {
                Console.WriteLine("Libro agregado correctamente con ID = {0}", nuevo.IDLibro);
            }

            nuevo = prods.NuevoLibro(
                ctx.Editoriales.FirstOrDefault(ed => ed.Nombre.Contains("Addison-Wesley")),
                "Unix Network Programming, Volume 1: The Sockets Networking API",
                "9780131411555",
                "0131411551",
                Path.Combine(pathPortadas, "Unix Network Programming, Volume 1 The Sockets Networking API.jpg"),
                new DateTime(2003, 11, 24),
                1024);

            if (nuevo != null)
            {
                Console.WriteLine("Libro agregado correctamente con ID = {0}", nuevo.IDLibro);
            }
#endif

            /*
             *    Categoria newCat = new Categoria() {Nombre = "Informatica", Parent = parent};
             *
             *    ctx.Categorias.Add(newCat);
             *
             *    parent.SubCategorias.Add(newCat);
             *    ctx.SaveChanges();
             *
             *
             *    //  ctx.Categorias.Load();
             *
             *    var showCat = ctx.Categorias.FirstOrDefault();
             *
             *      //.Where(categ => categ.Nombre == "Libros").First();
             *
             *    Console.WriteLine(showCat?.CategoriaID.ToString());
             */
            Console.WriteLine("Press Any Key To Continue...");
            Console.ReadLine();

            ctx.Dispose();
        }