我是Azure App Service移动应用的新手。我正在尝试理解使用TableController
向客户端公开复杂域对象的选项。我使用TableController
的目的是利用客户端查询和离线同步。
表控制器旨在对简单DTO执行CRUD操作。所以我试图找出一个复杂的域模型如何作为TableController
设计的DTO来公开。
我读过this post,其中解释了MappedEntityDomainManager
。该示例显示了DTO和持久对象之间相当简单的映射。但是,如果我希望我的映射更复杂呢?
例如,假设我有这样的持久类型:
public class Order {
public Customer Customer { get; set; }
public IList<OrderItem> OrderItems { get; }
}
public class Customer {
public string Name { get; set; }
public string TelephoneNumber { get; set; }
}
public class OrderItem { ... }
我有一个像这样声明的表控制器:
public class OrderController : TableController<OrderDto>
那么OrderDto
会是这样的吗?
public class OrderDto {
public string CustomerName { get; }
public string Customer { get; }
public string OrderItems { get; }
}
映射如下。 Order.Customer.Name
属性已展平为OrderDto.CustomerName
。完整的Customer
对象序列化为OrderDto.Customer
。 Order.OrderItems
列表已序列化为OrderDto.OrderItems
。
这种复杂的映射可以用MappedEntityDomainManager
完成吗?如果没有,那怎么办呢?我知道leveraging $expand
,但我担心这可能是一个不受支持的黑客而不是推荐的方法。
答案 0 :(得分:1)
执行此操作的最佳方法是使用Automapper。博客文章是一个简单的例子,但您可以使用automapper进行非常复杂的映射。
这是一个更复杂的例子:https://github.com/paulbatum/FieldEngineerLite/blob/master/FieldEngineerLite.Service/Controllers/JobController.cs。它适用于Azure移动服务,但同样的概念适用于Azure移动应用程序。您只需要更改名称空间。