0

我一直在关注如何实现 Silverlight 应用程序的本教程。本教程使用 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 个客户端作业可以有多个作业)。以及工作和细节之间的一对一关系。

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

如果有人能在这个问题上启发我,我将不胜感激。

亲切的问候,在此先感谢。

4

1 回答 1

0

最终遵循了Brad Abrams 教程,这些教程要好得多,而且更新得多。

于 2009-09-25T13:04:06.117 回答