Как выполнять запросы с несколькими моделями в Entity Framework с помощью Dependency Injection - PullRequest
1 голос
/ 27 декабря 2011

Я пытался использовать Dependency Injection с платформой Entity в своем приложении MVC. В проекте я определил класс универсального репозитория для операций CRUD. Есть конкретные классы обслуживания для каждого объекта модели. Мой уровень контроллера в презентации использует конкретные классы слоя службы для получения данных из базы данных. Эти конкретные классы в свою очередь вызывают методы RepositoryClass для реализации реальной работы с базой данных.

Ниже приведен пример определения класса (для простоты я удалил различные детали интерфейса и реализацию некоторых методов):

class RepositoryBase<T>
{    
  Add(T entity) {...}
  Update (T entity) {...}    
  Delete (T entity) {...}   
  T GetById(int id) {...}     
  IEnumerable<T> GetAll() 
  {dbContext.ToList();} 
 }

 public class CarsService  {
    public IEnumerable<Cars> GetCars()
    {  
       var cars = RepositoryBase<Cars>.GetAll();
        return cars;  
    }
    public Car GetCar(int id)
    {            
       var car = RepositoryBase<T>.GetById(id);              
       return car;         
    }
  }

 Public class DealerService {...}

Все это прекрасно работает, пока мне приходится иметь дело с 1 типом объекта за раз в моем приложении. Но я не уверен, как внести изменения в класс обслуживания, чтобы получить данные для нескольких объектов, т. Е. Для автомобилей и дилеров. Обратите внимание, в моем сценарии, хотя у меня определен идентификатор дилера в модели автомобилей, но свойство навигации отсутствует. Поэтому я должен присоединиться к Cars и Dealers, используя запрос linq.

Пожалуйста, помогите определить правильный класс (слой), который необходимо изменить. Все примеры, которые я нашел, говорят только об одном объекте за один раз.

1 Ответ

0 голосов
/ 27 декабря 2011

DbContext.Set (). Include (), прежде всего, вы ставите свое отображение конфигурации для исправления,во-вторых, если вы не хотите использовать свойства навигации, вы можете использовать

RepositoryBase<Cars>.GetEntitySet<Cars>.Include("Dealers") //this does join if you key to join

, но в этом случае вы должны использоватьдобавить к RepositoryBase<T> свойство

public ISet<T> GetEntitySet<T>(string table2Include)
{
   return DbContext.Set<T>()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...