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)
{
...
}
如今,当您有多对多连接时,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)
{
...
}