存储库层中的映射

时间:2014-03-30 03:19:16

标签: c# entity-framework mapping repository-pattern

我在服务层内部映射了我的一些代码:

var authors = _repository.FindAll().Where(x => x.IsActive == 1).ToList();
authorViews = authors.ModelToViewModelCollection();

但是我的高级建议我在存储库层内映射如下:

return (from c in Context.Books
                    .Where(x=>x.IsActive == 1)
                    select new BookDetailsView
                    {
                        ID = c.ID,
                        TitleB = c.TitleB,
                        TitleE = c.TitleE,

                    }).ToList();

两者之间有什么区别。

1 个答案:

答案 0 :(得分:1)

主要区别在于,在第一种情况下,控制器(或服务)将直接操作EF来构建查询。无论你怎么写它都不是存储库模式。

第二种方法将EF操作保留在存储库中并直接返回视图模型,因此上层不知道您使用EF并且不必构建查询。 / p>

存储库的目的是将其他层与持久性分离,即其他层只知道存储库并仅处理特定于它们的对象。这样,持久性可以优化对象的存储/检索方式,而不会影响其他层。这意味着您可以在持久性中使用EF,Nhibernate,mongo db等根据应用程序和业务层的最佳选择,或者UI永远不会知道它,并且永远不需要在持久性中更改某些内容时进行更改。

如果您想知道有多少时间切换数据库或更改持久性,那么很少切换数据库,但更改持久性模型(表,列等)的情况经常发生,特别是在开发时。存储库可以帮助您仅在持久性中保留更改。