【问题标题】:The context is not currently tracking the entity上下文当前未跟踪实体
【发布时间】:2014-04-08 20:28:28
【问题描述】:

我正在使用WCF DataService 和 AutoMapper 来映射对象。

当我获得单个实体时,以下示例可以正常工作。

BOND contextBond = this.agent.Context.BONDS.Where(x => x.SECURITY_ID == Security.SECURITY_ID).FirstOrDefault();
Mapper.Map<BondItem, BOND>(this.Bond, contextBond);
this.agent.Context.UpdateObject(contextBond);

下面是List Object的实现。我得到一个异常“上下文当前没有跟踪实体。”在最后一行

List<SECURITY_XREF> contextXREF = this.agent.Context.SECURITY_XREF.Where(x => x.SECURITY_ID == Security.SECURITY_ID).ToList();
Mapper.Map<List<SecurityXrefItem>, List<SECURITY_XREF>>(this.Xref, contextXREF);
this.agent.Context.UpdateObject(contextXREF);

任何想法我该如何解决这个问题?换句话说,我怎样才能将列表对象传递给 UpdateObject 方法。

谢谢

【问题讨论】:

    标签: c#-4.0 wcf-data-services


    【解决方案1】:

    DataServiceContext.UpdateObject 只接受单个实体对象,您必须对列表中的每个对象调用一次。 DataServiceContext.SaveChanges 将通过一次调用将所有更改保存到服务器。

    foreach (var entity in list)
    {
        context.UpdateObject(entity);
    }
    context.SaveChanges()
    

    【讨论】:

    • 我之前确实尝试过这种方法,但仍然收到相同的错误消息“上下文当前未跟踪实体”。
    【解决方案2】:

    foreach (var entity in list)
    {
        if(!context.IsAttached(entity)) context.Attach(entity);
        context.UpdateObject(entity);
    }
    context.SaveChanges()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 2011-09-20
      相关资源
      最近更新 更多