2012-10-30 32 views
0

我正在處理SOA體系結構。所以我不能訪問數據庫。我在服務器上使用DTO作爲實體。我在客戶端填充一個實體並將其提交給服務器,那是爲實體生成主鍵時。獲取已提交的實體在服務器進行更改時返回給客戶端當插入SubmitChanges()

我使用(客戶端)

_customerDomainContext.SubmitChanges(SubmitChangesCallback,NULL);

時,我嘗試訪問新添加的enity,我只能看到我填寫的屬性回調。

我有機會獲得submited實體的域名服務(服務器端),如下所示。

[Insert] 
    public void InsertCustomerDTO(CustomerDTO customer) 
    { 
     CustomerDTO customerFromDB = CreateCustomerDTOCore(customer); 
    } 

有沒有辦法,我得到新生成的實體到客戶端,這樣我就可以訪問的SubmitChanges實體的新生成的密鑰。

任何建議表示感謝。

回答

1

使用時只需將回調的說法:

context.SubmitChanges(x => 
      { 
       //Contains your entities fulfilled by the server 
       x.ChangeSet 
      }, null); 

它包含由服務器返回你已經保存後的實體,所以在你的關鍵字段,你會發現實際的鍵值。
爲了運行上述過程,可能不太明顯,您需要「編輯」您的實體。

[Insert] 
public void InsertJeopardyModel(CustomerDTO jeopardy) 
{ 
    CustomerDTO customerFromDB = CreateCustomerDTOCore(customer); 
    jeopardy.Id = customerFromDB.Id; 
    jeopardy.MyProperty = customerFromDB.MyDBEquivalentProperty; 
} 

正如你在編輯過的示例中看到的,我實際上正在編輯CustomerDTO對象,就像Enitity Framework或LINQ2SQL一樣。
然後將編輯的實體序列化到客戶端,該客戶端將在Changeset屬性中公開它。

+0

我試過這個選項,但變更集只返回從客戶端發送的值。 Incase如果我使用的是EntityFramework,是的,它也會帶來Id,但我使用POCO對象。 – crazy9

+0

這可能是因爲你沒有改變作爲參數傳遞的實體。我用服務器端方法 – mCasamento

+0

改進了我的答案。非常感謝,你救了我的一天。 – crazy9

相關問題