EF4, Lambda, шаблон репозитория и DTO

У меня есть полусложный вопрос относительно Entity Framework4, лямбда-выражений и объектов передачи данных (DTO).

Итак, у меня есть небольшой проект EF4, и, следуя установленным принципам объектно-ориентированного проектирования, у меня есть DTO, обеспечивающий уровень абстракции между потребителями данных (GUI) и моделью данных.

  • VideoDTO = DTO с геттерами / сеттерами, используется графическим интерфейсом
  • VideoEntity = Entity, сгенерированным EF4

Мой вопрос вращается вокруг использования DTO графическим интерфейсом (и отсутствия использования графического интерфейса Entity вообще) в сочетании с необходимостью передачи лямбда-выражения в слой данных. Мой уровень данных - это базовый шаблон репозитория с добавлением. Изменить, удалить, получить, получить список и т. Д. используется графическим интерфейсом

  • VideoEntity = Entity, сгенерированным EF4
  • Мой вопрос вращается вокруг использования DTO графическим интерфейсом (и отсутствия использования графического интерфейса Entity вообще) в сочетании с необходимостью передачи лямбда-выражения в слой данных. Мой уровень данных - это базовый шаблон репозитория с добавлением. Изменить, удалить, получить, получить список и т. Д. используется графическим интерфейсом

  • VideoEntity = Entity, сгенерированным EF4
  • Мой вопрос вращается вокруг использования DTO графическим интерфейсом (и отсутствия использования графического интерфейса Entity вообще) в сочетании с необходимостью передачи лямбда-выражения в слой данных. Мой уровень данных - это базовый шаблон репозитория с добавлением. Изменить, удалить, получить, получить список и т. Д. Попытка реализовать метод Find с такой подписью:

    public IEnumerable<VideoDTO> Find(Expression<Func<VideoEntity, bool>> exp)
    ...
    _dataModel.Videos.Where(exp).ToList<Video>()
    ---
    

    Моя проблема / беспокойство заключается в том, что "exp" должен иметь тип VideoEntity вместо VideoDTO. Я хочу сохранить разделение проблем, чтобы графический интерфейс не знал об объектах Entity. Но если я попытаюсь передать

    Func<VideoDTO, bool> 
    

    , я не смогу выполнить LINQ Where для этого выражения, используя фактическую модель данных.

    Есть ли способ преобразовать Func в Func

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

    Достаточно ли это ясно? Спасибо за вашу помощь


    Спасибо за ответы вам обоим.

    I ' Я попробую определить критерии поиска в объекте и использовать их в выражении LINQ. Просто начинаю с EF4 и L2S, используя это как учебный проект.

    Еще раз спасибо!

    6
    задан Kev 1 October 2011 в 20:21
    поделиться