Cómo: Agregar, modificar y eliminar entidades (WCF Data Services)

Con las bibliotecas de cliente de WCF Data Services , puede crear, actualizar y eliminar los datos de entidad de un servicio de datos realizando las acciones equivalentes en los objetos en la clase DataServiceContext. Para obtener más información, vea Actualizar el servicio de datos (WCF Data Services).

En el ejemplo de este tema se usan el servicio de datos de ejemplo Northwind y las clases del servicio de datos del cliente generadas automáticamente. Se crean este servicio y las clases de datos del cliente al completar el tutorial rápido de WCF Data Services.

Ejemplo

En el siguiente ejemplo se crea una nueva instancia de objeto y, a continuación, se llama al método AddObject de la clase DataServiceContext para crear el elemento en el contexto. Cuando se llama al método SaveChanges se envía un mensaje HTTP POST al servicio de datos.

' Create the DataServiceContext using the service URI.
Dim context = New NorthwindEntities(svcUri)

' Create the new product.
Dim newProduct = _
    Product.CreateProduct(0, "White Tea - loose", False)

' Set property values.
newProduct.QuantityPerUnit = "120gm bags"
newProduct.ReorderLevel = 5
newProduct.UnitPrice = 5.2D

Try
    ' Add the new product to the Products entity set.
    context.AddToProducts(newProduct)

    ' Send the insert to the data service.
    context.SaveChanges()

    Console.WriteLine("New product added with ID {0}.", newProduct.ProductID)
Catch ex As DataServiceRequestException
    Throw New ApplicationException( _
            "An error occurred when saving changes.", ex)
// Create the DataServiceContext using the service URI.
NorthwindEntities context = new NorthwindEntities(svcUri);

// Create the new product.
Product newProduct =
    Product.CreateProduct(0, "White Tea - loose", false);

// Set property values.
newProduct.QuantityPerUnit = "120gm bags";
newProduct.ReorderLevel = 5;
newProduct.UnitPrice = 5.2M;

try
{
    // Add the new product to the Products entity set.
    context.AddToProducts(newProduct);

    // Send the insert to the data service.
    context.SaveChanges();

    Console.WriteLine("New product added with ID {0}.", newProduct.ProductID);
}
catch (DataServiceRequestException ex)
{
    throw new ApplicationException(
        "An error occurred when saving changes.", ex);
}

En el siguiente ejemplo se recupera y modifica un objeto existente y, a continuación, se llama al método UpdateObject en DataServiceContext para marcar el elemento en el contexto cuando se actualice. Cuando se llama al método SaveChanges se envía un mensaje HTTP MERGE al servicio de datos.

Dim customerId = "ALFKI"

' Create the DataServiceContext using the service URI.
Dim context = New NorthwindEntities(svcUri)

' Get a customer to modify using the supplied ID.
Dim customerToChange = (From customer In context.Customers _
                        Where customer.CustomerID = customerId _
                        Select customer).Single()

' Change some property values.
customerToChange.CompanyName = "Alfreds Futterkiste"
customerToChange.ContactName = "Maria Anders"
customerToChange.ContactTitle = "Sales Representative"

Try
    ' Mark the customer as updated.
    context.UpdateObject(customerToChange)

    ' Send the update to the data service.
    context.SaveChanges()
Catch ex As DataServiceRequestException
    Throw New ApplicationException( _
            "An error occurred when saving changes.", ex)
End Try
string customerId = "ALFKI";

// Create the DataServiceContext using the service URI.
NorthwindEntities context = new NorthwindEntities(svcUri);

// Get a customer to modify using the supplied ID.
var customerToChange = (from customer in context.Customers
                        where customer.CustomerID == customerId
                        select customer).Single();
 
// Change some property values.
customerToChange.CompanyName = "Alfreds Futterkiste";
customerToChange.ContactName = "Maria Anders";
customerToChange.ContactTitle = "Sales Representative";

try
{
    // Mark the customer as updated.
    context.UpdateObject(customerToChange);

    // Send the update to the data service.
    context.SaveChanges();
}
catch (DataServiceRequestException  ex)
{
    throw new ApplicationException(
        "An error occurred when saving changes.", ex);
}

En el siguiente ejemplo se llama al método DeleteObject en DataServiceContext para marcar el elemento en el contexto cuando se elimine. Cuando se llama al método SaveChanges se envía un mensaje HTTP DELETE al servicio de datos.

' Create the DataServiceContext using the service URI.
Dim context = New NorthwindEntities(svcUri)

Try
    ' Get the product to delete, by product ID.
    Dim deletedProduct = (From product In context.Products _
                          Where product.ProductID = productID _
                          Select product).Single()


    ' Mark the product for deletion.    
    context.DeleteObject(deletedProduct)

    ' Send the delete to the data service.
    context.SaveChanges()

    ' Handle the error that occurs when the delete operation fails,
    ' which can happen when there are entities with existing 
    ' relationships to the product being deleted.
Catch ex As DataServiceRequestException
    Throw New ApplicationException( _
            "An error occurred when saving changes.", ex)
End Try
// Create the DataServiceContext using the service URI.
NorthwindEntities context = new NorthwindEntities(svcUri);

try
{
    // Get the product to delete, by product ID.
    var deletedProduct = (from product in context.Products
                          where product.ProductID == productID
                          select product).Single();

    // Mark the product for deletion.    
    context.DeleteObject(deletedProduct);

    // Send the delete to the data service.
    context.SaveChanges();
}
// Handle the error that occurs when the delete operation fails,
// which can happen when there are entities with existing 
// relationships to the product being deleted.
catch (DataServiceRequestException ex)
{
    throw new ApplicationException(
        "An error occurred when saving changes.", ex);
}

En el ejemplo siguiente se crea una instancia de objeto nueva y, a continuación, se llama al método AddRelatedObject en DataServiceContext para crear el elemento en el contexto junto con el vínculo al pedido relacionado. Cuando se llama al método SaveChanges se envía un mensaje HTTP POST al servicio de datos.

Dim productId = 25
Dim customerId = "ALFKI"

Dim newItem As Order_Detail = Nothing

' Create the DataServiceContext using the service URI.
Dim context = New NorthwindEntities(svcUri)

Try
    ' Get the specific product.
    Dim selectedProduct = (From product In context.Products _
                           Where product.ProductID = productId _
                           Select product).Single()

    ' Get the specific customer.
    Dim cust = (From customer In context.Customers.Expand("Orders") _
                Where customer.CustomerID = customerId _
                Select customer).Single()

    ' Get the first order. 
    Dim order = cust.Orders.FirstOrDefault()

    ' Create a new order detail for the specific product.
    newItem = Order_Detail.CreateOrder_Detail( _
            order.OrderID, selectedProduct.ProductID, 10, 5, 0)

    ' Add the new item with a link to the related order.
    context.AddRelatedObject(order, "Order_Details", newItem)
    
    ' Since the item is now tracked by the context,
    ' set just the link to the related product.
    context.AddLink(selectedProduct, "Order_Details", newItem)

    ' Add the new order detail to the collection, and
    ' set the reference to the product.
    order.Order_Details.Add(newItem)
    newItem.Order = order
    newItem.Product = selectedProduct

    ' Send the inserts to the data service.
    context.SaveChanges()
Catch ex As DataServiceQueryException
    Throw New ApplicationException( _
            "An error occurred when saving changes.", ex)

    ' Handle any errors that may occur during insert, such as 
    ' a constraint violation.
Catch ex As DataServiceRequestException
    Throw New ApplicationException( _
            "An error occurred when saving changes.", ex)
int productId = 25;
string customerId = "ALFKI";

Order_Detail newItem = null;

// Create the DataServiceContext using the service URI.
NorthwindEntities context = new NorthwindEntities(svcUri);

try
{
    // Get the specific product.
    var selectedProduct = (from product in context.Products
                           where product.ProductID == productId
                           select product).Single();

    // Get the specific customer.
    var cust = (from customer in context.Customers.Expand("Orders")
                where customer.CustomerID == customerId
                select customer).Single();

    // Get the first order. 
    Order order = cust.Orders.FirstOrDefault();

    // Create a new order detail for the specific product.
    newItem = Order_Detail.CreateOrder_Detail(
        order.OrderID, selectedProduct.ProductID, 10, 5, 0);

    // Add the new item with a link to the related order.
    context.AddRelatedObject(order, "Order_Details", newItem);
    
    // Since the item is now tracked by the context,
    // set just the link to the related product.
    context.AddLink(selectedProduct, "Order_Details", newItem);

    // Add the new order detail to the collection, and
    // set the reference to the product.
    order.Order_Details.Add(newItem);
    newItem.Order = order;
    newItem.Product = selectedProduct;
   
    // Send the inserts to the data service.
    context.SaveChanges();
}
catch (DataServiceQueryException ex)
{
    throw new ApplicationException(
        "An error occurred when saving changes.", ex);
}

// Handle any errors that may occur during insert, such as 
// a constraint violation.
catch (DataServiceRequestException ex)
{
    throw new ApplicationException(
        "An error occurred when saving changes.", ex);
}

Vea también

Tareas

Cómo: Adjuntar una entidad existente a DataServiceContext (WCF Data Services)
Cómo: Definir las relaciones de entidad (WCF Data Services)

Conceptos

Realizar operaciones por lotes (WCF Data Services)

Otros recursos

Biblioteca de cliente de WCF Data Services