Entity FrameWork 4: Obteniendo, insertando y actualizando registros

El Entity FrameWrok (EF) es una buena manera de trabajar con los datos y centrarnos en la logica del negocio mas que en el tratamiento de los datos pero apesar de usar sitios web de datos dinamicos (SWDD) siempre se requiere manejar de forma personalizada las operaciones hacia nuestras tablas es aqui donde se usarian estas opciones:

Antes que nada siempre se define un manejador del contexto de datos que es la linea erpbuildandcarEntities dc = new erpbuildandcarEntities(); es este el que hace los manejos hacia la base de datos.

Traer registros de la base de datos

erpbuildandcarEntities dc = new erpbuildandcarEntities();
var contrat = from a in dc.v_contratos select a;

Esto va hacer que en la variable “contrat” se le asigne un objeto IQueryable<v_contratos>, como se ve esto es LINQ to SQL y se podria hacer algunos filtros basados en Where y demas  opciones de Linq to Sql pero si se quisiera hacer algo diferente como aplicarles filtros a estos datos  puedes hacer algo mo esto:

contrat= contrat.Where(a => a.Fecha_de_Emision >= desde);
contrat= contrat.Where(a => a.Fecha_de_Emision <= hasta);

esto le aplica filtros a los valores que estan en el objeto.

Insertar un registro

Primero creamos una instancia de la clase (en este caso una insta de contratos), luego se le asignan los valores que le corresponden, una vez termiando con ello se le asigna al contexto de la base de datos y por ultimo se graban los cambios.

erpbuildandcarEntities erpe = new erpbuildandcarEntities();
rentacard.contratos cont = new rentacard.contratos(); //creando una instancia de la clase contratos
cont.anulado = false; //asignado valores
cont.combustible = Convert.ToDecimal(txtcombustible.Text);
cont.ejecutado = false;
cont.fecha = DateTime.Parse(txtfecha.Text);
.
.
.
.
erpe.AddTocontratos(cont); //adicionando el objeto a al contexto de datos
erpe.SaveChanges();  //grabamos los cambios

Actualizando registros

Veamos este ejemplo, lo que se quiere es actualizar el numero de documento con el siguiente al usado actualmente, asi si el numero actual es “000001” se debe de grabar en labla el “000002” pues veamos como es esto:

erpbuildandcarEntities erpe = new erpbuildandcarEntities();
int h = Convert.ToInt16(cbotipdoc.SelectedValue);
rentacard.series  order = (from o in erpe.series where o.idtipdoc == h select o).First();
order.numact= (Convert.ToInt16(txtnumdoc.Text) + 1).ToString().PadLeft(10, ‘0’);
erpe.SaveChanges();

Articulos relativos:

ASP .NET Dinamyc Data: Guia Completa sobre Sitios Web de Datos Dinamicos
Una plantilla (template) para sitios web de datos dinamicos
Entity FrameWork 4: Obteniendo, insertando y actualizando registros
Entity FrameWork: Por que devuelve registros repetidos una vista
Sito Web de Datos Dinamicos: Cambiar el campo a mostrar en los foring key
Sitio web de datos dinamicos: Componentes en NuGet.
Sitio de datos dinamicos: Cambiar los nombres de campos y tablas, cambiar orden de campos en la metadata

Acerca de

Antes que nada voy a dejar en claro algo, en este blog escribo como se me place, asi que no busquen errores de ortografia o de redaccion que los van a encontrar a montones y tampoco me critiquen o me digan nada sobre ellos pues no tengo intencion alguna de cambiarlos, lo que escribo lo dejo asi y no lo corrijo,claro esta a menos que sean lineas de codigo. Jorge Prado Anci, profesional en desarrollo de aplicaciones, en especial las dirigidas a bases de datos. He trabajado con VFP en casi todas sus versiones, se algo de Java (que no me gusta, es eso solo no me gusta, es bueno pero no me gusta), lo suficiente de PHP como para tener mi propio CMS(es que sigue sin gustarme por la capacidad de desorden que te permite este “lenguaje”), VB lo conoci y lo deteste tanto que lo olvide al punto de no querer adoptar ni por obligacion a su reemplazante VB .NET (por lo mismo de Java) y si C# este si me encanta y aun que conozco bastante bien el lenguaje, la verdad es que me falta mucho del Framework (del 100% estare en un 65%). Soy un apasionado por el orden (en los proyectos de desarrollo), de la programacion en capas (de MVC conozco pero no he aplicado mucho), los estandares y las condenadas pruebas unitaria. Venga creo que ya con esto fue suficiente.

Tagged with: , , , , , ,
Publicado en c#, Dynamic Data, SQL SERVER
3 comments on “Entity FrameWork 4: Obteniendo, insertando y actualizando registros
  1. slaxsna dice:

    Hola que tal muy buena explicacion, tengo una duda, como le puedo hacer en EF para poder crear un nuevo codigo asignandole +1 al ultimo registro agregado en la base de datos? … espero me puedas ayudar, muchas gracias y excelente sitio.

    • xmeele dice:

      Recomendaria que ese trabajo lo hicieras en la DB pero puedes hacerlo desde el EF de esta manera:
      Aun asi si quisieras hacerlo desde el EF puedes hacer esto:

      erpbuildandcarEntities erpe = new erpbuildandcarEntities();
      //con esto obtengo el mayor valor
      string codact = (From o in erpe.mitabla Select o.codigo).Max();

      //aqui pones el proceso de creacion de tu objeto que intentas insertar
      rentacard.miobjeto cont = new rentacard.miobjeto();
      //lo que hago aqui es que le adiciono uno al valor del codigo actual (codact) y relleno el resto con 10 ceros.

      cont.codigo = (Convert.ToInt16(codact) + 1).ToString().PadLeft(10, ’0′);
      //los demas campos de tu tabla

      erpe.AddTomitabla(cont);
      erpe.SaveChanges();

      Pero esa logica deberia de estar en la base de datos, ya que si es un codigo podrias usar el autonumerico de sql server para los campos identidad (pk), si no es un primari key y es algo como “00001” y le tiene que seguir el “00002” tambien recomendaria que usaras un trigger en la tabla AFTER INSERT en el sqlserver y colocar alli el calculo algo como;

      declare @newcod varchar(10);
      set @newcod = (select MAX(contratos.numdoc) from contratos);
      declare @numero int = cast(@newcod as int)+1;
      DECLARE @codigo varchar(10) ;
      — Add the T-SQL statements to compute the return value here
      select @codigo = replicate(‘0’,(10-len((cast(@numero as
      varchar(10))))))+cast(@numero as varchar(10)) ;
      y luego reemplazar ese valor en la tabla pero desde el trigger.

  2. Rodrigo dice:

    Hola! estoy trabajando por primera vez con asp.net y con modelado MVC, uso bases de datos de sql, creo el modelo (Base de datos de SerGen), el controlador (Tabla Pedidos) y la vista (Index), y hasta acá todo bien. el tema es que en el controlador quiero aplicar un filtro a la tabla pedidos para que en la vista a la que invoco, solo me traiga cierto tipo de pedidos.
    Vos pusiste el codigo en CSharp pero estoy usando VB. Podrías ayudarme?

    Public Class PedidosController
    Inherits System.Web.Mvc.Controller

    ‘Declaro la variable context que hace una instancia a todas las entidades de la base.
    Public context As sergenEntities = New sergenEntities()

    ‘ GET: /Pedidos
    Function Index() As ActionResult
    ‘Declaro la variable pedidos, y le asigno de la variable context la tabla pedidos.
    Dim pedidos = context.Pedidos
    ‘Le paso a la vista el paquete de datos de pedidos.
    Return View(pedidos)
    End Function

    … es mas.. te molestaría pasarme tu celular o te paso el mio para consultarte x whatsapp? estoy empezando con esto y se me complica mucho.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Escribe tu dirección de correo electrónico para suscribirte a este blog, y recibir notificaciones de nuevos mensajes por correo.

Únete a otros 441 seguidores

Blog Stats
  • 304,391 hits
A %d blogueros les gusta esto: