En este cuarto video veremos como funciona el Layout, los Bundles, y como podemos acceder a la información a través de Entity Framework y mostrarla en una vista utilizando Razor.
En este segundo video veremos cómo agregar Entity Framework a nuestro proyecto MVC .Net, ademas explicare puntos clave para evitar problemas a futuro, te ahorrare horas de stackoverfow.
Para contratar el servicio de timbrado comunícate al siguiente teléfono (33) 36581329 o al correo electrónico[email protected]. Y si deseas un DESCUENTO diles que viste los videos de Héctor de León o hdeleon.
En este video te mostrare como timbrar el xml que en los videos anteriores construimos y sellamos.
En este video te mostrare como contrarrestar los campos FieldSpecified creados en el primer video, poner el formato correcto de fecha, obtener la cadena original, obtener el campo certificado, poner los namespaces al xml, y por ultimo como sellar el xml con tu key.
Igual te recuerdo que utilizar EntityFramework.Extended como Entity Framework nativo no las recomiendo cuando vas a modificar más de mil datos, mejor utiliza un procedimiento almacenado.
La ventaja que veo al utilizar EntityFramework.Extended es un aspecto de sintaxis ya que de esta manera evitamos hacer el recorrido de los elementos e ir modificando objeto por objeto, con esta librería es de una forma más sencilla para el programador.
Para el siguiente ejemplo, supongamos que tenemos una tabla llamada Persona, que debemos modificar la edad a 10 años de todas las personas de Nombre “Juan”. Seria de la siguiente manera:
using(MiEntity db= new MiEntity()){
//realizamos la modificación sin foreach, ni SaveChanges()
db.Persona.Where(d => d.Nombre=="Juan")
.Update(x => new Persona() { Edad = 10 });
}
De esta manera no necesitamos el método SaveChanges(), ya que Update lo hace internamente.
Existen varias formas de modificar varios elementos en conjunto por medio de Entity Framework.
Te mostrare como realizar una forma de cómo hacerlo a continuación. Teniendo una tabla llamada Persona, supongamos que debemos modificar la edad a 10 años de todas las personas de Nombre “Juan”. Seria de la siguiente manera:
using(MiEntity db= new MiEntity()){
//Obtenemos todos los Juanes
IQuearyable<Persona> lst = db.Persona.Where(d=>d.Nombre=='Juan');
//recorremos la lista
foreach(Persona oPersona in lst){
//asignamos la edad
oPersona.Edad=10;
}
//modificamos los datos en la base de datos
db.SaveChanges();
}
Cuando tengas la necesidad de editar más de mil filas en un proceso, mejor hazlo con un procedimiento almacenado (Stored procedure).
Cuando se trabaja en un equipo de desarrollo que sobre pasa los 3 programadores muchas veces se debe obligar a que se realicen tareas básicas como recortar los espacios en las cadenas por medio de Trim, o quizá si existe un requerimiento del cliente de que todas las cadenas estén en mayúsculas realizar un ToUpper o por lo contrario un ToLower, bueno, cualquier función sobre algún tipo de dato en todos nuestros modelos de nuestra aplicación.
Para asegurarnos de que siempre sean ejecutadas este tipo de operaciones existe en MVC .Net algo llamado Binder o ModelBinder el cual trabaja como cubierta de la información y puede transformarla a lo que deseemos, validar o realizar una operación.
A continuación incluyo una clase la cual hará que todas las cadenas que existan en nuestros View Model se les aplique una función Trim y una función ToUpper, así evitamos ponerlas en todos los controles, haciendo que esto ya sea un proceso por defecto en toda la aplicación.
namespace Sistema.Models.Binders
{
public class TrimToUpperBinder : DefaultModelBinder
{
protected override void SetProperty(ControllerContext controllerContext,
ModelBindingContext bindingContext,
System.ComponentModel.PropertyDescriptor propertyDescriptor, object value)
{
//Solo modificaremos los string, por lo cual detectamos el tipo de dato
if (propertyDescriptor.PropertyType == typeof(string))
{
var stringValue = (string)value;
if (!string.IsNullOrEmpty(stringValue))
{
stringValue = stringValue.Trim(); //trimeamos
stringValue = stringValue.ToUpper(); //mayuscula
}
value = stringValue;
}
base.SetProperty(controllerContext, bindingContext,
propertyDescriptor, value);
}
}
}
Y para que sea ejecutado en toda la aplicación debemos inicializar nuestra clase en el archivo Global.asax en el método Application_Start() de la siguiente manera:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
//Aquí remplazamos el binder por defecto con el nuestro
ModelBinders.Binders.DefaultBinder = new Sistema.Models.Binders.TrimToUpperBinder();
}