WCF数据服务中的级联删除

时间:2010-08-06 12:12:38

标签: silverlight wcf wcf-data-services cascade astoria

是否可以使用Silverlight中的WCF数据服务通过单个命令删除持久对象图? 我开始使用this walkthrough并添加了删除所选订单的代码(其中包含详细信息):

private void deleteOrder_Click(object sender, RoutedEventArgs e)
{
    Order deletedOrder = (Order)ordersGrid.SelectedItem;

    // Delete the selected order.
    svcContext.DeleteObject(deletedOrder);

    // Remove the deleted order from the binding collection.
    ordersGrid.SelectedIndex = ordersGrid.SelectedIndex == 0 ? 1 : ordersGrid.SelectedIndex - 1;
    ordersBindingCollection.Remove(deletedOrder);
}

当我将更改保存回服务器时,会发出删除请求:

--batch_2009b119-0747-4019-8974-8ea7dd29963a
Content-Type: multipart/mixed; boundary=changeset_b451aecf-b66d-4f0f-8e6d-8a067646b350

--changeset_b451aecf-b66d-4f0f-8e6d-8a067646b350
Content-Type: application/http
Content-Transfer-Encoding: binary

DELETE http://localhost:55378/PurchasesService.svc/Orders(1) HTTP/1.1
Content-ID: 90

--changeset_b451aecf-b66d-4f0f-8e6d-8a067646b350--
--batch_2009b119-0747-4019-8974-8ea7dd29963a--

但它在数据库端失败并且违反了外键约束:

--batchresponse_b6c22c24-17ec-409b-ba91-91784116927d
Content-Type: multipart/mixed; boundary=changesetresponse_41e6e873-a5dd-446d-bda0-99405ba92a63

--changesetresponse_41e6e873-a5dd-446d-bda0-99405ba92a63
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 500 Internal Server Error
Content-ID: 90
Cache-Control: no-cache
DataServiceVersion: 1.0;
Content-Type: application/xml

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
  <code></code>
  <message xml:lang="uk-UA">An error occurred while processing this request.</message>
</error>
--changesetresponse_41e6e873-a5dd-446d-bda0-99405ba92a63--
--batchresponse_b6c22c24-17ec-409b-ba91-91784116927d--

我还尝试将关系的 OnDelete 属性设置为.edmx

中的级联

是否可以进行此类删除?谁应该注意删除引用的对象:客户端还是服务器?并且应该向服务器发送多少个删除请求:一个或N + 1(其中N是给定订单的详细信息)。也许我错过了一些关键点。是否有任何WCF数据服务教程描述删除对象图?

1 个答案:

答案 0 :(得分:3)

YAY!我想通了! = D今天几个小时我一直在做同样的事情!

所以我没有在edmx中设置Cascade。

您在数据库中设置了

在SQL Server Management Studio中:

  1. 数据库图表中选择要级联删除的关系
  2. 打开属性
  3. 展开插入并更新
  4. 将删除规则设置为级联。
  5. 重新加载/更新您的实体框架模型。当你这样做时,visual studio将更新CSDL / SSDL(Whatever?)。

    Reference from MSDN
     “如果要在删除父记录时自动删除父项的所有子记录,可以指定级联删除规则。强烈建议您指定级联删除规则在概念模型和数据库。“