Я создал решение n-уровня, в котором я получаю связанные данные из службы WCF, обновляя его в приложении Windows Forms, а затем возвращаю обновленные данные через WCF для сохранения в базе данных , Приложение, служба WCF и база данных находятся на разных машинах.Entity Framework, WCF и обновления
Данные, извлекаются состоит из объекта и дочерние объекты ...
public Product Select(string catalogueNumber) {
return (from p in this.ProductEntities.Products.Include(@"Tracks")
where p.vcCatalogueNumber == catalogueNumber
select p).FirstOrDefault() ?? new Product();
}
Обновления применяются клиентским приложением может, а также обновление существующего контента, а также вставлять дополнительные «дорожка» объекты.
Когда я получаю объект продукта обратно из клиентского приложения, я могу видеть все обновления правильно, однако для того, чтобы сохранить все правильно изменения я должен прыгать через несколько обручей ...
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();
}
Несомненно, должен быть более простой способ сделать это?
Примечание: Я провел большую часть дня, исследуя проект EntityBag, но обнаружил, что это не было обновлено для работы с EF RTM. В частности, в то время как он будет успешно обновлять существующие данные, исключения выбрасываются при смешивании в новых объектах.
Это, наверное, то, что я должен смотреть на, но у меня пока нет , К сожалению, мы только недавно начали использовать EF & WCF, где я работаю, и Astoria в настоящее время является еще одним пунктом в списке новых технологий для исследования. Благодарю. –
Я, наконец, обдумал это (в первую очередь потому, что начал играть с SilverLight), и на самом деле, я думаю, это тот ответ, который я искал. –