【问题标题】:OData V4 AddObject SetLink odata.bind does not trasmit related entitiesOData V4 AddObject SetLink odata.bind 不传输相关实体
【发布时间】:2016-08-30 08:26:09
【问题描述】:

我创建了 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,但不幸的是,在控制器的 POST 方法中,引用的实体“Guest”和“Event”为空。

【问题讨论】:

  • 您找到解决方案了吗?
  • 并非如此。我更改了我的模型,因此它会公开外键的 ID 属性。在我的请求中,我设置了 ID,并在服务器上从数据库中获取带有 ID 的对象。然后我可以使用 EF 方法来做我的 CRUD。

标签: asp.net-web-api odata


【解决方案1】:

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

MSN 文章在这里:DataServiceContext.SetLink Method

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    相关资源
    最近更新 更多