调用AddLink()时,DataServiceContext entityTracker成员变为null!

时间:2013-04-11 13:59:26

标签: c# clr wcf-data-services odata wcf-rest

在调用AddLink实例的DataServiceContext方法时,我遇到了一个非常奇怪的问题。该调用在使用WCF REST服务的POST方法内进行,该服务使用数据服务。我不会详细介绍与此服务架构相关的详细信息,但如果您有任何异议,请说明。

所以,这是方法实现:

    public DEvent PostEvent(DEvent inputEvent)
    {
        if (inputEvent == null)
            return null;
        try
        {                
            var ctx = EFTestDbEntities.CreateContext();
            var ev = new DEvent();

            // populate with data... not worth mentioning.

            ctx.AddToDEvents(ev); // No problem here...
            var es = new LDEvent_CEventState();
            ctx.AddToLDEvent_CEventState(es); // No problem here, aswell...
            // Next line throws NullReferenceException!!!
            ctx.AddLink(ev, "LDEvent_CEventStates", es); 
            ev.LDEvent_CEventStates.Add(es);                           
            ctx.SaveChanges();
            return inputEvent;
        }
        catch (Exception exc)
        {
            Trace.TraceError(exc.ToString());
            throw new WebFaultException(HttpStatusCode.BadRequest);
        }
    }

调用AddLink抛出一个NullReferenceException,这个特定函数please check here没有记录在MSDN上。该函数应该抛出参数null和无效的操作异常。请注意,在抛出null异常之前还有两个涉及实体跟踪器的调用。

在Reflector的帮助下调试代码我注意到ctx.entityTracker成员在输入AddLink()时变为空。我从实例创建中跟踪了实体跟踪器字段,发现没有理由应该更改。我可能错过了什么,但我对此表示怀疑。我在AddLink()之前插入了更多操作,但异常总是抛出在同一位置。

当我在WPF应用程序中测试它时,根本没有任何问题,并且表现得如预期的那样。

我错过了什么?

需要提一下,我正在使用VS 2012并使用Nuget获得OData V3。服务托管在IIS 7.5中,并且都位于同一应用程序池和网站上。项目中包含的包是:

  • Microsoft.Data.Edm,5.4.0
  • Microsoft.Data.OData,5.4.0
  • Microsoft.Data.Services.Client,5.4.0,这是DataServiceContext所在的位置
  • System.Spatial,5.4.0

那么,这是一个CLR问题吗?还是OData API?还是IIS? ServiceHostDataServiceHost

任何帮助我试图让我理解这里发生的事情是非常感激的,我真的希望我错过了一些东西。与此同时,我将重新开始工作,希望所有这些问题都消失:)

0 个答案:

没有答案