C# Web API OData-使用ODataModelBuilder公开ComplexType

C# Web API OData-使用ODataModelBuilder公开ComplexType,c#,asp.net,asp.net-web-api,odata,C#,Asp.net,Asp.net Web Api,Odata,我有两个实体(订单和产品),我用ODataModelBuilder作为OData公开。在Order实体中,有一个状态复杂类型。有没有办法公开状态复杂类型 ODataModelBuilder _modelBuilder = new ODataModelBuilder(); var _status = _modelBuilder.ComplexType<Status>(); _status.Property(x => x.Description); _status.Propert

我有两个实体(订单和产品),我用ODataModelBuilder作为OData公开。在Order实体中,有一个状态复杂类型。有没有办法公开状态复杂类型

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);
ODataModelBuilder\u modelBuilder=new ODataModelBuilder();
var_status=_modelBuilder.ComplexType();
_属性(x=>x.Description);
_属性(x=>x.Name);
_status.Property(x=>x.StatusId);
var _order=_orders.EntityType;
_order.HasKey(x=>x.OrderId);
_属性(x=>x.ProductId);
_属性(x=>x.Quantity);
_order.ComplexProperty(x=>x.Status);
var _product=_products.EntityType;
_product.HasKey(x=>x.ProductId);
_product.Property(x=>x.Name);
_产品属性(x=>x.Description);
我可以想到的另一种方法是将状态转换为EntityType。但是,使用这种方法,我无法在订单实体类型中定义Status ComplexProperty,因此,无法从订单类型中删除Status属性。订单实体类型必须具有状态


以前有人在Web API中使用OData时遇到过这个问题吗?

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

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");
公共类状态
{
//不管你这里有什么。。。
}
//本质上创建一个重复的类
公共类DerivedStatus:状态{}
//使用modelBuilder。。。
modelBuilder.ComplexType();
modelBuilder.EntitySet(“状态”);

不太理想,但似乎有效。在我看来,您还必须删除对ComplexProperty的调用。让我知道这是否适合您。

我觉得您的模型构建代码很好。你是说order在创建的模型中没有复杂的属性状态吗?我认为他需要一个属性路由约定。它很好,工作也很完美。订单没有状态复杂属性。我想做的是将状态公开为OData,所以我可以这样做:查看可用状态的列表。。虽然代码不会很干净,因为您有重复的类,但我认为它可能会工作,我将尝试一下。谢谢通过将基类声明为“复杂类型”修复了我的问题