OData V4 AddObject SetLink odata.bind不传输相关实体

时间:2014-09-29 18:44:23

标签: asp.net-web-api odata

我已经创建了ASP.NET主页上的文章中描述的OData V4服务。 我基本上有一个表格事件,我分配给客人。我需要这个多对多关系的附加信息,所以我创建了一个EventGuest表。

插入事件并通过OData插入来宾工作正常。只要我想插入相关实体,它就不想工作。

这是我的控制器代码:

public async Task<IHttpActionResult> Post(EventGuest eventGuest)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    _db.EventGuest.AddOrUpdate(eventGuest);
    await _db.SaveChangesAsync();
    return Created(eventGuest);
}

这就是我想要插入关系的方式。对于客户端代码,我使用官方T4模板。

var ev = container.Event.FirstOrDefault();
var guest = container.Guest.FirstOrDefault();

var evGuest = new EventGuest();
evGuest.Guid = Guid.NewGuid();
container.AddObject("EventGuest", evGuest);
container.SetLink(evGuest, "Event", ev);
container.SetLink(evGuest, "Guest", guest);

container.SaveChanges();

发送到服务器的请求对我来说并不太糟糕:

{"@odata.type":"#Entities.EventGuest","CreationTimestamp":"0001-01-01T00:00:00Z","Guid":"adf500e3-e3a1-4841-883e-2322ed863321","ID":0,"Event@odata.bind":"http://localhost/odata/Event(1)","Guest@odata.bind":"http://localhost/odata/Guest(1)"}

因此服务器尝试使用@odata.bind,但不幸的是,在Controller的POST方法中,引用的实体“Guest”和“Event”为空。

1 个答案:

答案 0 :(得分:0)

您是否尝试过MSDN文档中的示例?我注意到它总是使用AddLink而不是SetLink,即使在SetLink文档中也是如此。

MSN文章在这里:DataServiceContext.SetLink Method