Compartir a través de


Código de aplicación para procedimientos almacenados asignados (Entity Framework)

El código de la aplicación de esta sección muestra cómo usa Entity Framework los procedimientos almacenados que actualizan datos. Los procedimientos almacenados y el modelo de objetos que se usan en el ejemplo se describen en Compatibilidad con los procedimientos almacenados (Entity Framework).

Cuando los procedimientos almacenados se definen en el esquema de almacenamiento y se asignan en la especificación de asignación, se llaman implícitamente. Las secuencias de código utilizadas para crear, actualizar y eliminar las entidades son las mismas tanto si usa los procedimientos almacenados en el modelo de datos como si no.

Crear una entidad mediante un procedimiento almacenado

En el ejemplo siguiente se crea una entidad SalesOrderDetail nueva y se inserta en el almacenamiento.

    SalesOrderDetail newSODetail = new SalesOrderDetail();

    newSODetail.CarrierTrackingNumber = "4E0A-4F89-AE";
    newSODetail.ModifiedDate = DateTime.Now;
    newSODetail.SpecialOfferID = 1;
    newSODetail.rowguid = Guid.NewGuid(); 
    newSODetail.UnitPrice = 45.00M;
    newSODetail.OrderQty = 5;
    newSODetail.ProductID = 680;

    objCtx.AddToSalesOrderDetails(newSODetail);
    ObjectParameter par = new ObjectParameter("p", 45678);
    SalesOrderHeader soHeader = 
                  objCtx.SalesOrderHeader.Where("it.SalesOrderID = @p", par).First<SalesOrderHeader>();
    soHeader.SalesOrderDetail.Add(newSODetail);
    objCtx.SaveChanges();

Modificar una entidad mediante un procedimiento almacenado

El código siguiente modifica la propiedad de la cantidad de pedido de una entidad SalesOrderDetail.

    ObjectParameter par2 = new ObjectParameter("p", 45678);
     SalesOrderHeader soHeader2 = 
                      objCtx.SalesOrderHeader.Where("it.SalesOrderID = @p", par2).First<SalesOrderHeader>();
     soHeader2.SalesOrderDetail.Load();
     foreach (SalesOrderDetail sodet in soHeader2.SalesOrderDetail)
     {
            Console.WriteLine(sodet.SalesOrderDetailID + " Prod: " +
            sodet.ProductID + " Qty: " + sodet.OrderQty);
            if (sodet.ProductID.Equals(680))
            {
                  sodet.OrderQty = 6;
                  objCtx.SaveChanges();
                  break; 
            }
      }

Eliminar una entidad mediante un procedimiento almacenado

El código siguiente elimina una entidad SalesOrderDetail mediante un procedimiento almacenado.

    ObjectParameter par2 = new ObjectParameter("p", 45678);
    SalesOrderHeader soHeader2 = 
    objCtx.SalesOrderHeader.Where("it.SalesOrderID = @p",
                                      par2).First<SalesOrderHeader>();
    soHeader2.SalesOrderDetail.Load();
    foreach (SalesOrderDetail sodet in soHeader2.SalesOrderDetail)
    {
                Console.WriteLine(sodet.SalesOrderDetailID + 
                  " Prod: " + sodet.ProductID + " Qty: " +
                  sodet.OrderQty);
            if (sodet.ProductID.Equals(680))
            {
                  objCtx.DeleteObject(sodet);
                  objCtx.SaveChanges();
                  break; 
            }

    }

Código completo de la aplicación

Todos los ejemplos de esta sección se incluyen en el ejemplo siguiente. Incluya como comentario el bloque de código que crea una nueva entidad SalesOrderDetail después de haberse ejecutado una vez.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AdventureWorksModel;
using System.Data.Objects;

namespace AdvWksSalesSProcsClient
{
    class Program
    {
        static void Main(string[] args)
        {
            using (AdventureWorksEntities objCtx = new AdventureWorksEntities())
            {
                SalesOrderDetail newSODetail = new SalesOrderDetail();

                newSODetail.CarrierTrackingNumber = "4E0A-4F89-AE";
                newSODetail.ModifiedDate = DateTime.Now;
                newSODetail.SpecialOfferID = 1;
                newSODetail.rowguid = Guid.NewGuid(); 
                newSODetail.UnitPrice = 45.00M;
                newSODetail.OrderQty = 5;
                newSODetail.ProductID = 680;

                objCtx.AddToSalesOrderDetails(newSODetail);
                
                ObjectParameter par = new ObjectParameter("p", 45678);
                SalesOrderHeader soHeader = 
                      objCtx.SalesOrderHeader.Where("it.SalesOrderID = @p",
                                                     par).First<SalesOrderHeader>();

                soHeader.SalesOrderDetail.Add(newSODetail);
                objCtx.SaveChanges();

                ObjectParameter par2 = new ObjectParameter("p", 45678);
                SalesOrderHeader soHeader2 = 
                      objCtx.SalesOrderHeader.Where("it.SalesOrderID = @p",
                                                      par2).First<SalesOrderHeader>();
                soHeader2.SalesOrderDetail.Load();
                foreach (SalesOrderDetail sodet in soHeader2.SalesOrderDetail)
                {
                    Console.WriteLine(sodet.SalesOrderDetailID + 
                              " Prod: " + sodet.ProductID + " Qty: " + sodet.OrderQty);
                    if (sodet.ProductID.Equals(680))
                    {
                        objCtx.DeleteObject(sodet);
                        objCtx.SaveChanges();
                        break; 
                        
                    }

                }

                foreach (SalesOrderDetail sodet in soHeader2.SalesOrderDetail)
                {
                    Console.WriteLine(sodet.SalesOrderDetailID + 
                       " Prod: " + sodet.ProductID + 
                       " Qty: " + sodet.OrderQty);
                    if (sodet.ProductID.Equals(680))
                    {
                        sodet.OrderQty = 6;
                        objCtx.SaveChanges();
                        break;
                    }

                }

            }
        }
    }
}

Vea también

Tareas

Cómo ejecutar una consulta con un procedimiento almacenado (Entity Framework)
Cómo definir un modelo con un procedimiento almacenado (Entity Framework)

Conceptos

Compatibilidad con los procedimientos almacenados (Entity Framework)
Modelo AdventureWorks Sales (EDM)
Asignar conjuntos de asociaciones a procedimientos almacenados (Entity Framework)
ModificationFunctionMapping (EntityTypeMapping)
ModificationFunctionMapping (AssociationSetMapping)