1
試圖使用EF和Model第一種方法創建MVC項目。首先使用MVC存儲庫模式的EF模型
爲了以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框架的觀點。任何意見或方向在這一點上,將不勝感激。
所以你說在第2步控制器會以某種方式填充我的視圖模型,然後返回它?那並不意味着我的控制器將與我的數據模型緊密耦合?我可能錯過了一些東西。 – cdlong 2013-02-19 17:18:13
@cdlong - 您可以在控制器中進行映射,也可以在中間層進行映射。這是你做出的決定。無論你選擇什麼,如果你想使用視圖模型,你必須在某個地方進行映射。 – 2013-02-19 20:38:26
Ek0nomik - 感謝您的幫助。想想我終於開始瞭解更多。 – cdlong 2013-02-19 21:26:11