小编use*_*071的帖子

错误:无法将 PATCH 应用于导航属性。那我该怎么办?

我有一个 Web API 2.2 OData 4 使用实体框架为以下模型提供服务:

public class Company
{
  public int Id { get; set; }
  public string Name { get; set; }
  public virtual ICollection<CompanyType> CompanyTypes { get; set; }
}

public class CompanyType
{
  public int Id { get; set; }
  public string Name { get; set; }
  public virtual ICollection<Company> Companies { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

还有一些流畅的映射:

modelBuilder.Entity<Company>().HasMany(x => x.CompanyTypes).WithMany(x => x.Companies).Map(x =>
{
  x.MapLeftKey("CompanyId");
  x.MapRightKey("CompanyTypeId");
  x.ToTable("CompaniesCompanyTypes");
});
Run Code Online (Sandbox Code Playgroud)

在我的 CompanysController 上,我有一个补丁方法,希望能够发送以下请求并成功更新公司名称并为该公司创建几个公司类型记录:

PATCH http://localhost:50113/MessagingService/odata//CompanyDTOs(1)/ HTTP/1.1
Accept: …
Run Code Online (Sandbox Code Playgroud)

c# odata asp.net-web-api2

6
推荐指数
1
解决办法
3011
查看次数

带有DTO的OData Web API修补程序请求

而不是公开我的数据库模型,我试图让我的WebAPI端点使用DTO等价物.在我从Global.asax文件引用的WebAPIConfig中,我有:

builder.EntitySet<ProductDTO>("Products");
builder.EntitySet<Product>("ProductsDB");
Run Code Online (Sandbox Code Playgroud)

Product有一个ProductDTO没有的额外字段.

我的补丁请求目前是:

[AcceptVerbs("PATCH", "MERGE")]
public IHttpActionResult Patch([FromODataUri] int key, Delta<ProductDTO> patch)
{
Run Code Online (Sandbox Code Playgroud)

我可以看到,基本上我需要将我转换Delta<ProductDTO>为a Delta<Product>但我看不到Delta类中允许我设置其基础EntityType实例的任何方法.

有人有建议吗?

odata asp.net-web-api asp.net-web-api2

5
推荐指数
1
解决办法
1060
查看次数

标签 统计

asp.net-web-api2 ×2

odata ×2

asp.net-web-api ×1

c# ×1