J'ai créé une solution n-tier où je suis en train de récupérer des données connexes à partir d'un service WCF, sa mise à jour dans une application Windows Forms, puis renvoyer les données mises à jour via WCF pour être conservées à la base de données . L'application, le service WCF et la base de données sont tous sur des machines différentes.Entity Framework, WCF et mises à jour
Les données récupérées se compose d'un objet et des objets enfant ...
public Product Select(string catalogueNumber) {
return (from p in this.ProductEntities.Products.Include(@"Tracks")
where p.vcCatalogueNumber == catalogueNumber
select p).FirstOrDefault() ?? new Product();
}
Les mises à jour appliquées par l'application cliente peut, ainsi que la mise à jour du contenu existant, insérez également des objets « Track » supplémentaires.
Quand je reçois l'objet produit retour de l'application cliente, je peux voir tous les correctement mises à jour, mais afin de sauver tous les changements correctement, je dois sauter à travers quelques cerceaux ...
public void Save(Product product) {
Product original = this.Select(product.vcCatalogueNumber);
if (original.EntityKey != null) {
this.ProductEntities.ApplyPropertyChanges(product.EntityKey.EntitySetName, product);
// There must be a better way to sort out the child objects...
foreach (Track track in product.Tracks.ToList()) {
if (track.EntityKey == null) {
original.Tracks.Add(track);
}
else {
this.ProductEntities.ApplyPropertyChanges(track.EntityKey.EntitySetName, track);
}
}
}
else {
this.ProductEntities.AddToProducts(product);
}
this.ProductEntities.SaveChanges();
}
Sûrement, il doit y avoir un moyen plus facile de faire cela?
Note: J'ai passé la plus grande partie de l'après-midi enquête sur le projet EntityBag, mais a constaté que cela n'a pas été mis à jour pour fonctionner avec EF RTM. En particulier, alors qu'il mettra à jour avec succès les exceptions de données existantes sont levées lors du mélange dans de nouveaux objets.
Ceci est probablement quelque chose que je devrais regarder dans, mais encore je n'ai pas . Malheureusement, nous avons récemment commencé à utiliser EF & WCF où je travaille et Astoria est actuellement juste un autre élément sur la liste des nouvelles technologies à étudier. Merci. –
J'ai finalement commencé à regarder ça (principalement parce que j'ai commencé à jouer avec SilverLight) et en fait, je pense que c'est la réponse que je cherchais. –