He creado una solución de n niveles donde estoy recuperando datos relacionados de un servicio WCF, actualizándolos dentro de una aplicación de Windows Forms, y luego devolviendo los datos actualizados a WCF para persistir en la base de datos . La aplicación, el servicio WCF y la base de datos están en diferentes máquinas.Entity Framework, WCF y actualizaciones
que los datos sean recuperados consiste en un objeto y los objetos secundarios ...
public Product Select(string catalogueNumber) {
return (from p in this.ProductEntities.Products.Include(@"Tracks")
where p.vcCatalogueNumber == catalogueNumber
select p).FirstOrDefault() ?? new Product();
}
Las actualizaciones que se aplica por la aplicación cliente puede, además de actualizar el contenido existente, también insertar objetos adicionales "Track".
Cuando recibo el objeto Producto de vuelta de la aplicación cliente, puedo ver todas las actualizaciones correctamente, sin embargo con el fin de guardar todos los cambios correctamente tengo que saltar a través de unos aros ...
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();
}
Sin duda, tiene que haber una manera más fácil de hacer esto?
Nota: pasé la mayor parte de la tarde investigando el proyecto EntityBag, pero descubrí que esto no se ha actualizado para funcionar con EF RTM. En particular, aunque actualizará con éxito las excepciones de datos existentes, se lanzarán al mezclar en objetos nuevos.
Esto es probablemente algo que debería mirar en, pero hasta ahora no lo he hecho . Desafortunadamente, solo recientemente hemos comenzado a usar EF & WCF donde trabajo y Astoria es actualmente solo otro elemento en la lista de nuevas tecnologías para investigar. Gracias. –
Finalmente me he dado cuenta de esto (principalmente porque comencé a jugar con SilverLight) y en realidad, creo que es la respuesta que estaba buscando. –