Первая модель EF с шаблоном репозитория MVC

Попытка создать проект MVC с использованием EF и подхода Model first.

Чтобы реализовать его таким образом, чтобы веб-части и части данных были слабо связаны, я пытаюсь реализовать шаблон репозитория, но, прочитав множество статей, я все еще пытаюсь понять, какие объекты мой интерфейс репозитория должен возвращать или как они должен привязываться/сопоставляться с моделью «M» в моем проекте MVC.

Вот очень упрощенный пример того, что я прошу.

//Repository Interface
public interface IMemberRepository
{
    Member GetById(int id);
    IEnumerable<Member> FindByName(string name);
}

//Repository Interface Implementation
public class MemberRepository : IMemberRepository
{
    //My DB Context object created by EF
    private MyContainer context;

    public MemberRepository(MyContainer context)
    {
        this.context = context;
    }

    public Member GetById(int id)
    {
        return context.Members.SingleOrDefault(x => x.Id == id);
    }

    public IEnumerable<Member>  FindByName(string name)
    {
        return context.Members.Find(x => x.name == name);
    }

}

Таким образом, используя Ninject в качестве DI-фреймворка, я мог вызвать это из моего контроллера следующим образом:

public class GroupsController : Controller
{
    public ViewResult Find(string name)
    {
        IMemberRepository repo = 
          ObjectFactory.Instance.CreateInstance<IMemberRepository>();
        return repo.FindByName(name);
    }
 }

На данный момент я просто не понимаю, как мой объект-член (из модели EF) должен привязываться/сопоставляться с моим объектом модели-члена «MVC». Кажется, мне не хватает какого-то слоя отображения, или я просто полностью сбился с пути. Если бы я напрямую ссылался на свой сгенерированный EF класс, мне показалось бы, что я отрицаю смысл использования интерфейса и инфраструктуры DI. Любые советы или указания в этот момент будут оценены.


person Community    schedule 19.02.2013    source источник


Ответы (1)


Ваш IMemberRepository интерфейс и его реализация MemberRepository мне кажутся правильными. Именно так я структурирую свой код базы данных.

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

Это будет рабочий процесс:

  1. Получить объект(ы) из репозитория
  2. Заполните объекты модели представления всеми данными из объектов вашего репозитория.
  3. Верните модель представления в свое представление из контроллера.
person Justin Helgerson    schedule 19.02.2013
comment
Итак, вы говорите, что на шаге 2 контроллер каким-то образом заполнит мою модель представления, а затем вернет ее? Не означает ли это, что мои контроллеры будут тесно связаны с моей моделью данных? Я, наверное, что-то упускаю. - person ; 19.02.2013
comment
@cdlong — вы можете выполнить сопоставление в своем контроллере или на промежуточном уровне. Это решение за вами. Независимо от того, что вы выберете, если вы хотите использовать модели представления, вы должны где-то сделать это сопоставление. - person Justin Helgerson; 20.02.2013
comment
Ek0nomik - спасибо за помощь. Думаю, я, наконец, начинаю понимать немного больше. - person ; 20.02.2013