lunes, 22 de octubre de 2012

Unos ejemplos de LINQ

Acá hay unos pocos ejemplos de LINQ con Entity Framework y la clase Northwind

//Select Comun:
//Lambda:
var SelectLambda = db.Customers.ToList();

//Expresión:
var SelectLinq = (from item in db.Customers
                  select item).ToList();

//Where
//Lambda:
var WhereLambda = db.Customers.Where(c => c.Country.Trim() == "Mexico").ToList();

//Expresión:
var WhereLinq = (from item in db.Customers
                 where item.Country.Trim() == "Mexico"
                 select item).ToList();;

//Join

//Expresión:
var JoinLinq = (from item in db.Customers
                join p1 in db.Orders on item.CustomerID equals p1.CustomerID
                where item.Country.Trim() == "Mexico"
                select new
                {
                  Id = item.CustomerID,
                  OrderID = p1.OrderID
                }).ToList();

//Left Join

//Expresión:
var LeftJoinLinq = (from item in db.Customers
                    join p1 in db.Orders on item.CustomerID equals p1.CustomerID into resultado
                    from rta in resultado
                    where item.Country.Trim() == "Mexico"
                    select new
                    {
                       Id = item.CustomerID,
                       OrderID = (rta != null) ? rta.OrderID : 0
                    }).ToList();

jueves, 13 de septiembre de 2012

Problema de serialización entre Entity y Jquery AJAX

Cuando utilizamos objetos muy complejos generados por EntityFramework (Con Foreign Key) y demás nos da un error de serialización.

Por Ejemplo:


[HttpPost]
public JsonResult ObtenerLocalidad(int id)
{
  return Json(db.Departamentos.Where(x => x.idProvincia == id).ToList(), JsonRequestBehavior.AllowGet);          
}


Donde el modelo departamento tiene una propiedad de tipo provincia, para solucionar esto lo que debemos hacer es un Linq y seleccionar solo los campos que requerimos de la siguiente forma:

[HttpPost]
public JsonResult ObtenerLocalidad(int id)
{
   var records = from entity in db.Departamentos.Where(x => x.idProvincia == id)
                 select new
                 {
                   Id = entity.Id,
                   Nombre = entity.Nombre
                 };

return Json(records, JsonRequestBehavior.AllowGet);
}

miércoles, 12 de septiembre de 2012

Encriptar y Desencriptar en C#

Clase para encriptar y desencriptar cadena de texto

public class Encrypt
    {
        string key = "ABCDEFG54669525PQRSTUVWXYZabcdef852846opqrstuvwxyz";

        public string EncryptKey(string cadena)
        {
            //arreglo de bytes donde guardaremos la llave
            byte[] keyArray;
            //arreglo de bytes donde guardaremos el texto
            //que vamos a encriptar
            byte[] Arreglo_a_Cifrar =
            UTF8Encoding.UTF8.GetBytes(cadena);

            //se utilizan las clases de encriptación
            //provistas por el Framework
            //Algoritmo MD5
            MD5CryptoServiceProvider hashmd5 =
            new MD5CryptoServiceProvider();
            //se guarda la llave para que se le realice
            //hashing
            keyArray = hashmd5.ComputeHash(
            UTF8Encoding.UTF8.GetBytes(key));

            hashmd5.Clear();

            //Algoritmo 3DAS
            TripleDESCryptoServiceProvider tdes =
            new TripleDESCryptoServiceProvider();

            tdes.Key = keyArray;
            tdes.Mode = CipherMode.ECB;
            tdes.Padding = PaddingMode.PKCS7;

            //se empieza con la transformación de la cadena
            ICryptoTransform cTransform =
            tdes.CreateEncryptor();

            //arreglo de bytes donde se guarda la
            //cadena cifrada
            byte[] ArrayResultado =
            cTransform.TransformFinalBlock(Arreglo_a_Cifrar,
            0, Arreglo_a_Cifrar.Length);

            tdes.Clear();

            //se regresa el resultado en forma de una cadena
            return Convert.ToBase64String(ArrayResultado,
                   0, ArrayResultado.Length);

        }

        public string DecryptKey(string clave)
        {
            byte[] keyArray;
             //convierte el texto en una secuencia de bytes
             byte[] Array_a_Descifrar =
             Convert.FromBase64String(clave);

             //se llama a las clases que tienen los algoritmos
             //de encriptación se le aplica hashing
             //algoritmo MD5
             MD5CryptoServiceProvider hashmd5 =
             new MD5CryptoServiceProvider();

             keyArray = hashmd5.ComputeHash(
             UTF8Encoding.UTF8.GetBytes(key));

             hashmd5.Clear();
    
             TripleDESCryptoServiceProvider tdes =
             new TripleDESCryptoServiceProvider();

             tdes.Key = keyArray;
             tdes.Mode = CipherMode.ECB;
             tdes.Padding = PaddingMode.PKCS7;

             ICryptoTransform cTransform =
              tdes.CreateDecryptor();

             byte[] resultArray =
             cTransform.TransformFinalBlock(Array_a_Descifrar,
             0, Array_a_Descifrar.Length);

             tdes.Clear();
             //se regresa en forma de cadena
             return UTF8Encoding.UTF8.GetString(resultArray);
        }
    }

Función MD5

Dejo la función para realizar el Hash MD5:
public string md5(string password)
{
  System.Security.Cryptography.MD5 md5;
  md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
  Byte[] encodedBytes = md5.ComputeHash(ASCIIEncoding.Default.GetBytes(password));
  return  System.Text.RegularExpressions.Regex.Replace(BitConverter.ToString(encodedBytes).ToLower(), @"-", "");
}

lunes, 10 de septiembre de 2012

Tomar valor de Checkbox y Radio con Jquery

Checkbox

HTML:



Javascript:
$("#chkHombre").is(‘:checked’)



Radio:

HTML:
Hombre: 

Mujer: 


Javascript:
$("input[name='optg']:checked").val()

viernes, 24 de agosto de 2012

Como poner el Entity Framework en otro proyecto

Fuentes: EntityFrameworkOtroProyecto
Base: EntityMVC.sql

Pasos:

1- Lo primero que debemos hacer es agregar un proyecto de tipo "Class Library" a nuestra solución (Suponiendo que ya tenemos un proyecto MVC 3 creado).

2 - Luego agregamos a nuestra Class Library la siguiente referencia:
  • EntityFramework.dll
3 - A nuestro proyecto MVC 3 le agregamos las siguientes referencias:
  • System.Runtime.Serialization
  • System.Security
4 - En el web.config de nuesto MVC 3 agregamos la siguiente linea:




Esta sección quedaría:

      
        
        
        
        
        
        
      
    
5 - Agregamos una referencia de proyecto desde nuestro MVC 3 hacia nuestra Class Library.

6 - Copiamos el ConnectionString del app.config de nuestra Class Library al Web.config de nuestro proyecto MVC 3 y eliminamos el app.config.

7 - Agregamos la generación de código (Explicado en otro post) y lo trabajamos igual que como se explica en el post: EntityFramework con mvc3

sábado, 18 de agosto de 2012

lunes, 13 de agosto de 2012

Entity Framework con MVC3

Fuentes: EntityConMVC.rar
Script SQL: EntityMVCsql
EntityFramework y MVC

Enviando mail desde C#

Para enviar un mail desde c# lo que debemos hacer es:
primero agregamos en nuestro web.config las lineas para configurar nuestro SMTP de la siguiente forma:


    
      
        
      
    




Luego creamos una rutina para el envio de mail, para esto debemos importar los siguientes espacios de nombres:

using System.Net;
using System.Net.Mail;
using System.Net.Mime;



y la rutina para envios de mail sería la siguiente:
public void Enviar_mail(string para, string copia, string asunto, string titulo, string mensaje, string attach)
        {
            //Creamos el mensaje
            MailMessage Message = new MailMessage();
            //Agregamos el destinatario
            Message.To.Add(new MailAddress(para));
            //Agregamos el asunto
            Message.Subject = asunto;
            //Le decimos que soporte HTML en el body
            Message.IsBodyHtml = true;
            //Le agregamos el body o cuerpo del mesaje
            Message.Body = mensaje;

            //Si va con copia a alguien lo agregamos
            if (copia != "")
                Message.CC.Add(new MailAddress(copia));

            //Si tiene un adjunto se lo agregamos
            if (attach != "")
            {
                Attachment data = new Attachment(attach, MediaTypeNames.Application.Octet);
                Message.Attachments.Add(data);
            }

            SmtpClient client = new SmtpClient();
            //Enviamos el mail (Automáticamente toma la configuración del web.config)
            client.Send(Message);
        }

Con esto ya tendríamos nuestro envió de mails fácil y sencillo.

Validar Hidden en MVC 3

Como validar Hidden en MVC 3:

Para realizar esto le tenemos que decir al validador de Jquery que no debe ignorar los tipos Hidden por defecto de la siguiente manera:

$.validator.setDefaults({
   ignore: ""
})

miércoles, 25 de julio de 2012