在调用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中,并且都位于同一应用程序池和网站上。项目中包含的包是:
DataServiceContext
所在的位置那么,这是一个CLR问题吗?还是OData API?还是IIS? ServiceHost
或DataServiceHost
?
任何帮助我试图让我理解这里发生的事情是非常感激的,我真的希望我错过了一些东西。与此同时,我将重新开始工作,希望所有这些问题都消失:)