尝试使用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);
}
}
此时我只是不理解我的Member对象(来自EF模型)应该如何绑定/映射到我的'MVC'成员模型对象。似乎我必须缺少某种映射层,或者我只是完全偏离轨道。如果我直接引用我的EF生成类,感觉就像我否定了使用接口和DI框架的观点。此时的任何建议或指示都将受到赞赏。
答案 0 :(得分:2)
您的IMemberRepository
界面及其实施MemberRepository
对我来说是正确的。这也是我构建数据库代码的方式。
转到MVC世界,我将创建您从数据模型中填充的视图模型。这样您就可以灵活地在视图中添加所需的任何属性或其他属性。
这将是工作流程: