我在服务层内部映射了我的一些代码:
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();
两者之间有什么区别。
答案 0 :(得分:1)
主要区别在于,在第一种情况下,控制器(或服务)将直接操作EF来构建查询。无论你怎么写它都不是存储库模式。
第二种方法将EF操作保留在存储库中并直接返回视图模型,因此上层不知道您使用EF并且不必构建查询。 / p>
存储库的目的是将其他层与持久性分离,即其他层只知道存储库并仅处理特定于它们的对象。这样,持久性可以优化对象的存储/检索方式,而不会影响其他层。这意味着您可以在持久性中使用EF,Nhibernate,mongo db等根据应用程序和业务层的最佳选择,或者UI永远不会知道它,并且永远不需要在持久性中更改某些内容时进行更改。
如果您想知道有多少时间切换数据库或更改持久性,那么很少切换数据库,但更改持久性模型(表,列等)的情况经常发生,特别是在开发时。存储库可以帮助您仅在持久性中保留更改。