2011-06-21 43 views
0

我一直在試圖弄清爲什麼這種方式無法正常工作。 我有許多方法的Web服務。其中一個返回實體的元素,另一個預計該實體的一個元素,並且應該用客戶端上所做的更改更新上下文和數據庫。Oracle鏈接 - 通過Web服務發送更新實體元素

「獲取」代碼如下

public InvoiceHeader getHeader(long pIdHeader){ 
    try{ 
    InvoiceHeader ih = lContext.InvoiceHeaders.SingleOrDefault(x => x.idHeader == pIdHeader); 
    return ih; 
    } catch (Exception exp){ 
    //log error 
    } 
} 

我試過幾種方法來得到這個工作。以下是我認爲那些都是最接近答案:■ (1):

public bool submitChanges(InvoiceHeader iHeader){ 
    try{ 
    InvoiceHeader ih = getHeader(iHeader.idHeader); 
    lContext.InvoiceHeaders.Context.Refresh(RefreshMode.KeepChanges, iHeader); 
    lContext.SubmitChanges(); 

    return true; 
    } catch (Exception exp) { 
    //log error 
    return false; 
    } 
} 

的另一種方法是 (2)

public bool submitChanges(InvoiceHeader iHeader){ 
    try{ 
    lContext.InvoiceHeaders.Attach(iHeader, true); 
    lContext.SubmitChanges(); 

    return true; 
    } catch (Exception exp) { 
    //log error 
    return false; 
    } 
} 

在這兩種情況下,都跑到確定「返回真「,但沒有更新。請告訴我在這裏做錯了什麼。 如果您需要更多信息,請告訴我。 感謝所有 裏卡多。

回答

0

已解決。事實證明,當我們獲得一個實體脫離上下文的控制時,即使我們將其附加到上下文,它也不再控制它。除非,也就是說,如果我們有一個版本字段; 爲了讓它工作,

=>向您的實體添加版本字段;

1)檢查可空複選框

2)是版本複選框

3)更新校驗=從不

4)自動同步始終;

你應該以某種方式處理該版本。也許是更新觸發器; 代碼:

1)創建您的上下文的新實例;

2)連接的對象,告訴LINQ又改爲

3)提交更改

DataContext lContext = new DataContext(); 
lContext.InvoiceHeaders.Attach(iHeader, true); 
lContext.SubmitChanges(); 

大部頭的區別是什麼,我已經嘗試過確實是對我的實體的版本字段。