1

在调用实例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会引发NullReferenceExceptionMSDN 上未针对此特定函数记录的异常,请在此处查看。该函数应该抛出参数 null 和无效操作异常。请注意,在抛出空异常之前,还有两个涉及实体跟踪器的调用。

在反射器的帮助下调试代码我注意到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驻留的地方
  • 系统空间,5.4.0

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

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

4

0 回答 0