OdataClient SaveChanges不起作用并产生一个空的Microsoft.OData.Client.DataServiceResponse

时间:2015-09-08 14:35:22

标签: asp.net-web-api entity-framework-6 odata asp.net-web-api2 odatacontroller

由于一些扩展,我封装了odata容器:

public class Connector
{
    public string apiKey{get;set;}

    public  Connector(string apiKey)
    {
        this.apiKey = apiKey;
    }

    public Default.Container Get()
    {
        Default.Container container = new Default.Container(new Uri("http://documents.omnisoftonline.be/odata"));
        container.BuildingRequest += container_BuildingRequest;
        return container;
    }

    /// <summary>
    /// When fetching a single Document, you can enable this method to including fetch the binary data
    /// </summary>
    /// <param name="container"></param>
    /// <returns></returns>

    internal bool doIO = false;
    internal void container_BuildingRequest(object sender, BuildingRequestEventArgs e)
    {
        e.Headers.Add("X-ApiKey", apiKey);

        if (doIO && e.RequestUri.ToString().Contains("/Documents"))
        {
            e.RequestUri = new Uri(e.RequestUri.ToString() + (e.RequestUri.Query.Contains("?") ? "&" : "?") + "doIO=true");
        }


        this.container_BuildingRequest(sender, e);
    }
}

当我使用我的.dll(使用Connector类)时,我得到一个空结果(statuscode = -1,没有标题,......)The (normally) executed empty OdataServiceResponse

这就是我调用DLL的方式

 documentsConnector.Get().AddToDocuments(docToCreate);
 var serviceResponse = documentsConnector.Get().SaveChanges(Microsoft.OData.Client.SaveChangesOptions.None); //tried several options
 foreach(var operationResponse in serviceResponse)
 {
      Console.WriteLine("Response: {0}", operationResponse.StatusCode); //no operationResponses, so this isn't executed
 }

可能是因为我的对象无效。但是,我没有看到任何验证发生,这很奇怪......

有关如何传播SaveChanges()或预先验证(提交前)实体的任何想法?这篇文章没有发生(与Fiddler核实)

1 个答案:

答案 0 :(得分:0)

我的包装器类每次都创建一个新容器,因此实体已从Default.Container中删除