【发布时间】:2018-06-06 20:49:26
【问题描述】:
我正在创建一个 MS Web API 2 项目。我在一个单独的项目中创建了我的实体框架,并在我的 API 中引用它。阅读了一些教程,建议:
“理想情况下,我们不应该从 Web API 返回 EF 实体对象。建议从 Web API 返回 DTO(数据传输对象)”。
因此,我在我的 API 中创建了我的模型:
namespace MyAPI.Models
{
[Table("Customer")]
public class CustomerViewModel
{
[Key]
public int CustomerID { get; set; }
public string Code { get; set; }
public string Name { get; set; }
}
}
我的问题是:我是否需要在我的 API 中为每个模型创建一个数据上下文类,还是可以使用 EF 上下文类?如果我确实需要为对于每个模型,如何通过引用 EF 上下文类来实现这一点?以下是我开始的内容:
namespace MyAPI.Models
{
public class CustomerDbContext : DbContext
{
public CustomerDbContext() : base("name=CusetomerDbContext")
{
}
public DbSet<MyEFDataAccess.Customer> CustomerViewModel { get; set; }
}
}
我的控制器是:
namespace MyAPI.Controllers
{
public class CustomersController : ApiController
{
private readonly CustomerDbContext _context = new CustomerDbContext();
// GET: api/Customer
public IQueryable<CustomerViewModel> GetCustomerViewModels()
{
return _context.CustomerViewModel;
}
}
上面正确抛出错误,因为它不能直接将EF客户转换为CustomerViewModel!
【问题讨论】:
-
你展示了两段不相关的代码。请在您尝试将它们一起使用的地方显示代码。
-
@cwharris 编辑了我的帖子
-
“建议从 Web API 返回 DTO(数据传输对象)” - 这根本不是它想要对你说的:你应该有 为您的实体(与实体框架一起使用)和您的 API(您的 DTO)提供两个独立的类,然后将一个对象映射到另一个对象:docs.microsoft.com/en-us/aspnet/web-api/overview/data/…
标签: c# entity-framework asp.net-web-api