Как добавлять, изменять и удалять сущности (службы WCF Data Services)
Клиентские библиотеки служб Службы WCF Data Services позволяют создавать, обновлять и удалять данные сущностей в службе данных путем выполнения эквивалентных действий над объектами в контексте DataServiceContext. Дополнительные сведения см. в разделе Обновление службы данных (службы WCF Data Services).
Пример в этом разделе использует образец службы данных Northwind и автоматически сформированные клиентские классы службы данных. Эта служба и клиентские классы данных создаются после выполнения действий, описанных в разделе Краткое руководство по службам WCF Data Services.
Пример
В следующем примере создается новый экземпляр объекта и вызывается метод AddObject контекста DataServiceContext для создания в контексте нового элемента. Сообщение HTTP POST отправляется в службу данных при вызове метода SaveChanges.
' 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);
}
Следующий пример извлекает и модифицирует существующий объект, после чего вызывает метод UpdateObject в контексте DataServiceContext, чтобы пометить элемент контекста как обновленный. Сообщение HTTP MERGE отправляется в службу данных при вызове метода SaveChanges.
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);
}
Следующий пример вызывает метод DeleteObject объекта DataServiceContext для пометки элемента контекста как удаленного. Сообщение HTTP DELETE отправляется в службу данных при вызове метода SaveChanges.
' 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);
}
В следующем примере создается новый экземпляр объекта и вызывается метод AddRelatedObject контекста DataServiceContext для создания в контексте нового элемента и ссылки на связанный с ним заказ. Сообщение HTTP POST отправляется в службу данных при вызове метода SaveChanges.
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);
}
См. также
Задачи
Как присоединить имеющуюся сущность к контексту DataServiceContext (службы WCF Data Services)
Как определять связи сущностей (службы WCF Data Services)
Основные понятия
Пакетные операции (службы WCF Data Services)