Web API OData -暴露复杂类型与ODataModelBuilder

本文关键字:类型 ODataModelBuilder 复杂 暴露 API OData Web | 更新日期: 2023-09-27 18:03:11

我有2个实体(订单和产品),我用ODataModelBuilder公开为OData。在Order实体中,有一个Status复杂类型。是否有一种方法可以公开Status复杂类型?

ODataModelBuilder _modelBuilder = new ODataModelBuilder();
var _status = _modelBuilder.ComplexType<Status>();
_status.Property(x => x.Description);
_status.Property(x => x.Name);
_status.Property(x => x.StatusId);
var _order = _orders.EntityType;
_order.HasKey(x => x.OrderId);
_order.Property(x => x.ProductId);
_order.Property(x => x.Quantity);
_order.ComplexProperty(x => x.Status);
var _product = _products.EntityType;
_product.HasKey(x => x.ProductId);
_product.Property(x => x.Name);
_product.Property(x => x.Description);

我能想到的另一种方法是将Status转换为EntityType。然而,使用这种方法,我不能在Order实体类型中定义Status ComplexProperty,因此,从Order类型中删除Status属性。Order实体类型必须有Status。

有没有人在Web API中使用OData之前遇到过这个问题?

Web API OData -暴露复杂类型与ODataModelBuilder

似乎没有一种方法可以完全做你想做的。但是,您当然可以解决这个问题。

public class Status
{
   // whatever you have here...
}
// essentially create a duplicate class
public class DerivedStatus : Status { }
// using modelBuilder...
modelBuilder.ComplexType<Status>();
modelBuilder.EntitySet<DerivedStatus>("Statuses");

不太理想,但似乎有效。从我所看到的,您还必须删除对ComplexProperty的调用。