我使用Entity Framework CodeFirst方法构建了一个ASP.NET Web API。它创建的数据库表代表了我所期望的关系数据库。在我的API的GET操作中,我想从3个表中返回值。我见过的许多例子只显示了这样一个简单的回报:
// GET: api/Books
public IQueryable<Book> GetBooks()
{
return db.Books;
}
只返回Books对象中的字段。这不是非常有用,因为我有Author和BookType的外键。使用Entity Framework和Web API通常如何从多个表中返回字段值?我想我可以使用linq查询来连接表并返回结果。这是最有效的方法还是有更好的方法?
由于
答案 0 :(得分:1)
最好的办法是创建一个ViewModel,它包含返回UI所需的所有数据,然后从数据库实体中填充(通常使用AutoMapper等工具)。
然后返回ViewModel而不是数据库实体,这意味着您可以优化和简化通过线路发送的数据,并防止可能泄露敏感信息。
以下是如何实现这一目标的一个示例: http://bengtbe.com/blog/2009/04/14/using-automapper-to-map-view-models-in-asp-net-mvc/
除了模型方面,我还建议您还尝试避免在控制器操作中直接访问数据库上下文,而是将数据访问抽象到存储库(和服务,如果事情开始变得复杂) )。