Silverlight Asynchronous Crud Insert:一对一的关系?

时间:2009-09-08 00:39:11

标签: silverlight insert crud

我一直在关注如何实现Silverlight应用程序的this教程。本教程使用Northwind数据库作为示例。我一直在使用代码示例来实现与教程在我自己的应用程序中使用我自己的数据库显示的相同功能。本教程的最后一部分显示了如何将新项和关联的关系添加到Northwind数据库中的特定表中。此特定示例使用以下代码在3个链接表(Product,Order,Order_Details)上演示此功能:

private void addDetail_Click(object sender, RoutedEventArgs e)
{
    // Define a URI that returns the product with the specified ID.
    Uri productUri = new Uri(svcContext.BaseUri.AbsoluteUri
        + "/Products(" + this.productId.Text + ")");

    // Begin a query operation retrieve the Product object 
    // that is required to add a link to the new Order_Detail.
    svcContext.BeginExecute<Products>(productUri,
        OnProductQueryCompleted, null);
}

private void OnProductQueryCompleted(IAsyncResult result)
{
    // Use the Dispatcher to ensure that the 
    // asynchronous call returns in the correct thread.
    Dispatcher.BeginInvoke(() =>
        {
            // Get the Product returned by the completed query.
            IEnumerable<Products> queryResult =
                svcContext.EndExecute<Products>(result);
            Products returnedProduct = queryResult.First();

            // Get the currently selected order.
            Orders currentOrder = (Orders)ordersGrid.SelectedItem;

            // Create a new Order_Details object with the supplied FK values.
            Order_Details newItem = Order_Details.CreateOrder_Details(currentOrder.OrderID,
                returnedProduct.ProductID, 0, 0, 0);

            detailsBindingCollection.Add(newItem);

            // Add the new item to the context.
            svcContext.AddToOrder_Details(newItem);

            // Add the relationship between the order and the new item.
            currentOrder.Order_Details.Add(newItem);
            svcContext.AddLink(currentOrder, "Order_Details", newItem);

            // Set the reference to the order and product from the item.
            newItem.Orders = currentOrder;
            svcContext.SetLink(newItem, "Orders", currentOrder);

            // Add the relationship between the product and the new item.
            returnedProduct.Order_Details.Add(newItem);
            svcContext.AddLink(returnedProduct, "Order_Details", newItem);

            // Set the reference to the product from the item.
            newItem.Products = returnedProduct;
            svcContext.SetLink(newItem, "Products", returnedProduct);
        }
    );
}

我的数据库脚本:

CREATE TABLE InmarsatZenith.dbo.ClientJob
(JobRef nvarchar(15),
Summary text
PRIMARY KEY(JobRef))

CREATE TABLE InmarsatZenith.dbo.Job
(IntRef uniqueidentifier,
JobRef nvarchar(15),
CopyDeadline datetime,
PublicationDate datetime,
Repeat bit,
BusinessType nvarchar(25),
Sector nvarchar(30),
Lang nvarchar(15),
Format nvarchar(25),
CreativeRotation nvarchar(50),
TipinType nvarchar(25),
Status nvarchar(100)
PRIMARY KEY(IntRef))

CREATE TABLE InmarsatZenith.dbo.Detail
(IntRef uniqueidentifier,
Description nvarchar(100),
Date datetime
PRIMARY KEY(IntRef))

客户端工作和工作之间存在一对多的关系(1个客户端工作可以有很多工作)。工作和细节之间的一对一关系。

问题是我想在我的应用程序中实现相同的异步方法,但是要实现更简单的一对一关系。基本上我希望能够将新作业添加到我的“作业”表中,然后将相关详细信息添加到我的“作业详细信息”表中。我在尝试将此代码示例转换为使用此特定方法时遇到了一些麻烦,并且非常感谢在调整此代码以实现一对一关系方面的一些帮助。

如果有人能在这个问题上给我启发,我会非常感激。

亲切的问候,提前谢谢。

1 个答案:

答案 0 :(得分:0)

Brad Abrams Tutorials之后结束了更好,更新的更新。