从EF存储库创建MVCControllers的模式

时间:2012-08-03 18:05:02

标签: entity-framework asp.net-mvc-4 asp.net-mvc-controller

[此博客文章标题为:'Passing multiple Include statements into a Repository'提供了如何在对基于EF dbContext的对象进行保湿时控制加载的子项深度的概述。使用Linq表达式提供存储库的一个非常好的解释。

但博客留下了一个问题,通过解释控制器本身的外观,真正完善了所涉及的工作流程。

如果瘦控制器通常同意是好事,并且如果EF正在成熟到主流使用的程度,那么哪种模式最好在存储库和控制器之间进行调解?

乔治更好地表达了这个问题:

  

这很完美,但是怎么做   一个写控制器来处理一个对象的所有不同方式   并且它的孩子想要被要求吗?这是创建一个问题吗?   CustomerOrderController和CustomerOrderLineItemsController?

注意:This link is auto-offered by SO并且可能会解决'如何执行' - 我仍然需要概述要使用的语法。

mnymnythx

1 个答案:

答案 0 :(得分:0)

您是否考虑过使用generic repository

在实施工作单元模式时,文章比你想要的更好。您的标签包含MVC,因此我建议您使用此标签来帮助保持所有存储库和对象同步。

然后,在控制器中的操作中,您可以选择需要包含哪些属性:

 private UnitOfWork _unitOfWork;

        public YourController()
        {
            _unitOfWork = new UnitOfWork();
        }
        //
        // GET: /Market/
        public ActionResult Index()
        {
            return View(_unit.YourRepository.Get(m => m.IsActive, null, "CollectionToLoad1,CollectionToLoad2"));
        }

在这个例子中,我会得到IsActive位为true的每个项目,以及包括CollectionToLoad1和CollectionToLoad2

如果你不想实现一个工作单元,你可以简单地在控制器而不是单元中声明repo,并直接进行调用。