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

标签 c# asp.net asp.net-web-api odata

我有 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。但是,使用这种方法,我无法在订单实体类型中定义 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");

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

关于c# - Web API OData - 使用 ODataModelBuilder 公开 ComplexType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15331601/

相关文章:

c# - 为什么 .NET XPath 不像 [position() le 10001]

c# - 从 vb asp 到 C# asp .net 的转换

rest - 如何在 RESTful ASP.NET Web API 中路由非 CRUD 操作?

ASP.Net Web API - 授权 header 空白

c# - 用最小起订量模拟一个构造函数

c# - 获取 NpgSql Entity Framework 查询文本

asp.net - 通过 XSP2 运行守护进程有什么问题吗?

ASP.NET MVC4 对 404、401 和其他异常的错误处理

c# - ASP.NET MVC - 如何首先使用实体​​框架模型/数据库部署到 Azure?

asp.net-web-api - 使用 Autofac 和 ASP.Net Identity 将 ApplicationUserManager 传递给 ApplicationOAuthProvider