Можно ли отобразить запросы Linq из одной модели данных в запрос поверх другой модели данных?

Я хотел бы предоставить интерфейс OData для моего приложения. Примеры, которые я видел, используют EF для отображения запросов LINQ на запросы SQL.

ИМХО, этот подход в значительной степени предоставляет миру физическую модель базы данных (я знаю, что EF/NH дают некоторую гибкость, но она ограничена).

То, что я хотел бы сделать, это следующее:

  1. Определите мой контракт данных через несколько DTO.
  2. Иметь службу OData, которая позволит пользователям запрашивать данные моего контракта с данными.
  3. Иметь некоторый уровень перевода для перевода запросов через DTO в запросы, скажем, по модели EF или NH.
  4. Выполните переведенный запрос.
  5. Сопоставьте результаты с моими Контрактами на данные.

Я сошел с ума или есть решение этой проблемы?

2 ответа

Один из способов сделать это - создать ViewModel, который будет представлять вашу модель, а затем использовать AutoMapper для сопоставления между ними. Вы можете использовать как это:

   var address = _Context.Addresses.Where(p => p.AddressID == addressID).Single();
   AddressVM result = Mapper.Map<AddressVM>(address);

У меня есть 2 модели: "контрактная" модель и "постоянная" модель. Постоянная модель - это то, на что отображается Entity Framework. Метод Get, который возвращает IQueryable, возвращает IQueryable, который представляет собой нечто вроде:

return dbContext.PersistedCustomers.Select(x => new Customer(Name = x.OtherName, ...));

По крайней мере, при использовании DbContext в отличие от ObjectContext, где критерии, основанные на модели контракта, автоматически переводятся в условия, где критерии PersistedModel должны выполняться для базы данных. Надеемся, что различия между ними не настолько сложны, что вам нужно какое-то странное массирование данных. Я уверен, что есть пределы для разворота, которое это делает.

Другие вопросы по тегам