1

尝试使用 EF 和模型优先方法创建 MVC 项目。

为了以 Web 和数据部分松散耦合的方式实现它,我正在尝试实现存储库模式,但是,在阅读了许多文章之后,我仍然试图掌握我的 Repository 接口应该返回哪些对象或它们如何返回应该绑定/映射到我的 MVC 项目中的“M”模型。

这是我要问的一个非常简单的例子。

//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 框架的意义。在这一点上的任何建议或方向将不胜感激。

4

1 回答 1

2

您的IMemberRepository界面及其实现MemberRepository对我来说很合适。这也是我构建数据库代码的方式。

转到 MVC 世界,我将创建您从数据模型中填充的视图模型。这将使您可以灵活地在视图中添加所需的任何属性或附加属性。

这将是工作流程:

  1. 从存储库中获取对象
  2. 使用存储库对象中的所有数据填充视图模型对象
  3. 将视图模型从控制器返回到您的视图
于 2013-02-19T17:00:11.090 回答