AspNet Core WebApi OData - 多对多连接表

AspNet Core WebApi OData - Many to Many join tables

如今,当您有多对多连接时,EF Core 中推荐的模式是这样的:

完成后,我面临着如何在 OData 模型中公开它的问题。

从技术上讲,实体类型定义没有键 属性(因为它使用复合键,OData 框架不喜欢我将集合添加到模型中。

解决此问题的推荐方法是什么?

似乎 EF 和 OData 已经变得有些同步,如果它们能够真正共享模型构建代码,那就更好了。

为此,我发现在调用 AddSet 后的 OData 模型构建中,我能够以与在 EF 中相同的方式定义密钥 ...

Builder.EntityType<UserRole>().HasKey(ac => new { ac.UserId, ac.RoleId });

这有点干净,我还没有尝试过发布或直接请求这样的类型,但是从关系链的任何一侧扩展似乎都可以。

编辑:关于 this 在控制器中的定义的更多详细信息...

Url需要包含两个关键部分... HTTP GET ~/UserRole(123, 456)

与 PUT 和 DELETE 相同,但 POST 不包含键,它们是正文中对象的一部分。

方法签名必须包含两个关键部分,这里有一些示例...

public IActionResult Get([FromODataUri]int keyUserId, [FromODataUri]Guid keyRoleId)
{
    ...
}

public IActionResult Put([FromODataUri]int keyUserId, [FromODataUri]Guid keyRoleId)
{
    ...
}

public IActionResult Post(UserRole entity)
{
    ...
}