в идеале мы не должны возвращать объекты сущности EF из Web API.Рекомендуется возвращать DTO (объект передачи данных) из веб-API.
Причина этого заключается в том, чтобы убедиться, что вы можете изменить схему БД без изменения API, и наоборот.Если вы достигаете этой цели, то вы придерживаетесь данного совета.
Проблема, с которой вы столкнулись, является базовой.Тип A
не может быть неявно преобразован в тип B
.Что касается компилятора, вы пытаетесь преобразовать DbContext
в FormControl
, и он не знает, как это сделать.Вы должны четко сказать, что делать.Один пример, хотя и не велик:
public DbSet<MyEFDataAccess.Customer> Customer { get; set; }
и
public IQueryable<CustomerViewModel> GetCustomerViewModels()
{
return _context.Customer.Select(
customer => new CustomerViewModel
{
// <assign properties here>
}
);
}
При этом возвращение IQueryable<T>
от вашего Контроллера - это определенное нет-нет.Вы определенно хотите разрешить потребителю запрашивать определенные записи.Вы можете сделать это, чтобы включить нумерацию страниц, например:
public async Task<List<CustomerViewModel>> GetCustomerViewModels(
int skip = 0,
int take = 100
)
{
return await _context.Customer
.Skip(skip)
.Take(take)
.Select(
customer => new CustomerViewModel
{
// <assign properties here>
}
)
.ToListAsync();
}