我有一个 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) 而不是公开我的数据库模型,我试图让我的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实例的任何方法.
有人有建议吗?