0

J'ai reçu une question concernant l'insertion d'une entité avec des entités dépendantes à l'aide de services RIA (avec Silverlight 4.0). Disons que j'ai une entité dans ma base de données (sql) appelée "Beer" et une appelée "Supplier", avec une relation: Beer 1 - n Supplier. Il y a plusieurs fournisseurs pour un type de bière.Insertion d'une entité et d'entités dépendantes à l'aide des services RIA

Maintenant, il y a le cas d'utilisation suivant: L'utilisateur entre une nouvelle bière avec, disons, 5 fournisseurs.

Sur la vue silverlight j'ai maintenant deux DomainDataSource. Sur la bière DomainDataSource J'ajoute et soumets la nouvelle bière et sur le fournisseur DomainDataSource Je soumets maintenant les fournisseurs, qui contiennent une clé étrangère qui les relie à la bière.

Ma question est la suivante: Comment puis-je m'assurer que la bière est soumise en premier et ensuite les fournisseurs dépendants (se souvenir de la clé étrangère)?

Je suis conscient que je pourrais simplement chaîner le SubmitChanges() en utilisant l'événement OnSubmitted. Mais cette solution est plutôt ... bien ... boiteuse. Ca fait du code vraiment moche.

Merci pour vos nombreuses idées!

Répondre

1

Malheureusement, il n'y a aucun moyen de forcer l'ordre des mises à jour qui viennent dans le même ChangeSet.

Toutefois, si tous les nouveaux fournisseurs sont soumis au serveur avec de nouvelles bières (un grand SI), vous pouvez vérifier manuellement la ChangeSet dans votre méthode Upddate:

public void UpdateBeer(Beer beer) 
{ 
    foreach(ChangeSetEntry changeSetEntry in ChangeSet.Entries) 
    { 
     if (changeSetEntry.Entity.GetType() == typeof(Supplier)) 
     { 
      Supplier supplier = (Supplier)changeSetEntry.Entity; 
      UpdateSupplierInternal(supplier); 
     } 
    } 

    DataContext.Beers.Attach(beer, ChangeSet.GetOriginal(beer)); 
} 

qui appelle une méthode distincte pour mettre à jour le fournisseur . Vous avez toujours besoin d'une méthode UpdateSupplier ou RIA lancera une exception quand elle existe dans le ChangeSet, mais la méthode ne devrait rien faire:

public void UpdateSupplier(Supplier supplier) 
{ 
    // do nothing 
} 
+0

Je craignais que ce soit comme ça, merci! –