通常认为将应用程序分成几个层是良好的应用架构。在现代Web应用程序中,这些层包括数据层和UI/传输层,当将其发送给客户时,可能会以不同的方式对存储在数据库中的信息进行建模。
例如:您可能有一个数据库(Entity Framework)模型,看起来像这样:
public class Employee
{
public Guid Id {get; set;}
public string Name {get; set;}
public int AccessLevel {get; set;}
}
但是您的Web API可能会以不同的数据格式向客户端公开这些数据:
public class EmployeeDto
{
public string Name {get; set;}
public string SecurityClearence {get; set;}
}
使用ASP.NET Web API和(可能是)Microsoft ASP.NET Web API OData库,我们如何实现一个场景,使得我们的客户可以针对DTO格式编写查询,例如:
?$filter=(SecurityClearence eq 'TopSecret')
我们需要将其翻译成我们的数据格式。
?filter=(AccessLevel eq 007)
或者其他可以允许我动态查询数据库的格式,例如表达式。 例如:
db.Employees.Where(translatedExpression);
我已经考虑了几种手动实现的方法,但我很想知道其他人将如何解决这个问题,因为我觉得我的实现方式还比较粗糙,不太可能经受住审查。
Web API OData库(以及相关的EDM库)是否有一些功能可以帮助我实现部分或全部内容?