Ich habe eine N-Tier-Lösung erstellt, wo ich verwandte Daten aus einem WCF-Service abrufen, in einer Windows Forms-Anwendung aktualisieren und dann die aktualisierten Daten per WCF an die Datenbank weiterleiten . Die Anwendung, der WCF-Dienst und die Datenbank befinden sich alle auf verschiedenen Computern.Entity Framework, WCF und Updates
Die Daten bestehen Objekte eines Objekts und Kind abgerufen werden ...
public Product Select(string catalogueNumber) {
return (from p in this.ProductEntities.Products.Include(@"Tracks")
where p.vcCatalogueNumber == catalogueNumber
select p).FirstOrDefault() ?? new Product();
}
Das Updates von der Client-Anwendung angewandt werden kann, sowie vorhandene Inhalte zu aktualisieren, auch zusätzliche „Track“ Objekte einfügen.
Wenn ich das Product-Objekt zurück von der Client-Anwendung erhalten, kann ich alle Updates richtig, aber zu sparen, um alle Änderungen korrekt Ich habe zu springen durch ein paar Reifen sehen ...
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();
}
Sicherlich muss es einen einfacheren Weg geben, dies zu tun?
Hinweis: Ich habe den größten Teil des Nachmittags damit verbracht, das EntityBag-Projekt zu untersuchen, habe aber festgestellt, dass dieses nicht aktualisiert wurde, um mit EF RTM zu funktionieren. Während die vorhandenen Daten erfolgreich aktualisiert werden, werden beim Hinzufügen neuer Objekte Ausnahmen ausgelöst.
Dies ist wahrscheinlich etwas, das ich in aussehen sollte, aber noch habe ich nicht . Leider haben wir erst kürzlich mit EF & WCF begonnen, wo ich arbeite, und Astoria ist derzeit nur ein weiterer Punkt auf der Liste der neuen Technologien, die untersucht werden sollen. Vielen Dank. –
Ich bin endlich dazu gekommen, das zu betrachten (hauptsächlich, weil ich angefangen habe, mit Silverlight zu spielen) und tatsächlich denke ich, dass es die Antwort ist, nach der ich gesucht habe. –