2011-06-21 28 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(); 

大部头的区别是什么,我已经尝试过确实是对我的实体的版本字段。