我創建了一個n層解決方案,我從WCF服務中檢索相關數據,在Windows窗體應用程序中更新它,然後通過WCF返回更新後的數據以保存到數據庫。應用程序,WCF服務和數據庫都在不同的機器上。實體框架,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目前僅僅是要進行調查的新技術列表中的另一項目。謝謝。 – 2009-05-07 17:46:14
我終於看到了這個(主要是因爲我開始玩SilverLight),實際上,我認爲這是我正在尋找的答案。 – 2009-08-20 11:50:25