在调用实例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
MSDN 上未针对此特定函数记录的异常,请在此处查看。该函数应该抛出参数 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
?
非常感谢任何试图让我了解这里发生的事情的帮助,我真的希望我错过了一些东西。同时,我将重新启动我的工作站,希望所有这些问题都消失:)