2011-09-19 37 views
0

我試圖通過WCF,像這樣(僞代碼)回保存對象到數據庫:WCF數據服務節省關係實體

var Contact = new Contact 
{ 
    Id = Guid.NewGuid(), 
    Name = "Test", 
    Address = new Address 
    { 
     Id = Guid.NewGuid(), 
     Postcode = "blah" 
    } 
}; 

在我的模型之間的關係是1比1與聯繫和地址但這樣做失敗:

DB.AddToContacts(Contact); 
DB.SaveChanges(); 

抱怨關係不符合,不能爲空。所以,我想這個辦法:

DB.AddToContacts(Contact); 
DB.AddToAddresses(Contact.Address); 
DB.AddRelatedObject(Contact, "Address", Contact.Address); 
DB.SaveChanges(); 

,但現在我得到「的時候,在SourceProperty是一家集AddRelatedObject方法僅適用。」

我的問題:如何通過WCF輕鬆保存相關實體?

回答

0

我終於得到它做這個工作:

DB.AddToAddresses(Client.Address); 
DB.AddToClients(Client); 

DB.SetLink(Client, "Address", Client.Address); 

DB.SaveChanges(); 

也就是在導線WCF服務4個個人呼叫添加關係對象。最後,我會打14個電話,eek!

+0

您使用的是什麼版本的WCF?在'DB.SaveChanges'方法中可能有一個類型爲'SaveChangesOptions'的選項參數,它允許您批量發送請求。無論如何,我希望3因爲SaveChanges會導致請求發生,所以它不會自動添加額外的HTTP請求。 – NStuke

0

這可能不是最好的答案,但它適用於我......當嘗試在WCF數據服務中創建相關對象時,必須手動設置「回參考」(這是行爲不同的地方從EF)的正常使用..

所以,你的情況,你就必須設置某事像:

var Contact = new Contact 
{ 
    Id = Guid.NewGuid(), 
    Name = "Test", 
    Address = null 
}; 

var address = new Address 
{ 
     Id = Guid.NewGuid(), 
     Postcode = "blah", 
     // This is important 
     Contact = Contact 
}; 

contact.Address = address; 
DB.AddToContracts(Contract); 
DB.SaveChanges(); 

這是煩了......當我得到這個經驗的「硬」 WCF數據服務速度很慢,因爲s ** t和選擇分層數據(如Order - OrderPosition - Product)是一個真正的痛苦......你可能會考慮使用某些東西。對於延遲相關的場景不同...

+0

這對我來說根本不起作用,我的模型已經隨着時間到達數據庫調用並且存在大約8種不同的關係 - 必須有一種更簡單的方式......: ( – eth0