2009-09-08 8 views
0

J'ai suivi this tutoriel sur la façon de mettre en œuvre une application Silverlight. Le tutoriel utilise la base de données Northwind pour ses exemples. J'ai utilisé les exemples de code pour implémenter la même fonctionnalité que le tutoriel montre dans ma propre application avec ma propre base de données. La dernière partie du didacticiel montre comment ajouter de nouveaux éléments et des relations associées dans des tables spécifiques de la base de données Northwind. Cet exemple particulier illustre cette fonctionnalité sur 3 tables liées (produit, Ordre, Order_Details) en utilisant le code ci-dessous:Silverlight Asynchronous Crud Insert: relation d'un-à-un?

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); 
     } 
    ); 
} 

Ma base de données Scripts:

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)) 

Il y a un à plusieurs entre travail client et travail (1 travail client peut avoir plusieurs tâches). Et une relation un-à-un entre le travail et les détails.

Le problème est que je veux implémenter les mêmes méthodes asynchrones dans mon application mais pour une relation un à un beaucoup plus simple. Donc, essentiellement, je veux être en mesure d'ajouter un nouveau Job dans ma table "Job", puis ajouter les détails associés dans mon tableau "Job Details". J'ai eu quelques difficultés à essayer de convertir cet exemple de code pour travailler avec cette méthode particulière et j'apprécierais vraiment une certaine aide dans l'adaptation de ce code pour travailler pour une relation un-à-un.

Si quelqu'un pouvait m'éclairer sur ce sujet, je l'apprécierais vraiment.

Cordialement, merci d'avance.

Répondre