Как правильно использовать шаблон репозитория (с платформой сущностей) при работе с несколькими наборами сущностей?
Должен ли я создать хранилище для каждой сущности?
e.g.:
Имеются следующие объекты: Статьи, категории и комментарии.
Должен ли я иметь хранилище для каждого?
Я использовал репозиторий вот так:
public class BaseArticleRepository : BaseRepository
{
private ContentModel _contentctx;
public ContentModel Contentctx
{
get
{
if ((_contentctx == null))
{
_contentctx = new ContentModel();
}
return _contentctx;
}
set { _contentctx = value; }
}
// IDisposable Support code comes here....
}
И образец репозитория для статей:
public class ArticlesRepository : BaseArticleRepository
{
public Article GetArticleById(int id)
{
var article = Contentctx.Articles.Where(o => o.ArticleID == id).FirstOrDefault();
return article;
}
public List<Article> GetArticles()
{
var articles = Contentctx.Articles.ToList();
return articles;
}
public List<ArticleHeader> GetArticlesHeaders()
{
var articles = (from article in Contentctx.Articles
select new ArticleHeader
{
ArticleID = article.ArticleID,
Title = article.Title,
CategoryTitle = article.Articles_Categories.Title,
AddedBy = article.AddedBy,
AddedDate = article.AddedDate,
ViewCount = article.ViewCount
}).ToList();
return articles;
}
public List<ArticleHeader> GetArticlesHeaders(int PageIndex, int PageSize)
{
var articles = (from article in Contentctx.Articles
select new ArticleHeader
{
ArticleID = article.ArticleID,
Title = article.Title,
CategoryTitle = article.Articles_Categories.Title,
AddedBy = article.AddedBy,
AddedDate = article.AddedDate,
ViewCount = article.ViewCount
}).OrderBy(p => p.AddedDate).Skip(PageSize * PageIndex).Take(PageSize).ToList();
return articles;
}
public int GetArticleCount(string txtFilter)
{
int ret = Contentctx.Articles.Where(o => o.Title.Contains(txtFilter)).Count();
return ret;
}
public int AddArticle(Article article, int categoryId)
{
Contentctx.AddToArticles(article);
}
}
По сути, каждый репозиторий реализует все данные CRUD (включая получение данных с фильтрами и сортировками), хотя я читал в некоторых блогах, что это неправильная реализация шаблона репозитория, поскольку репозиторий должен реализовывать только базовую, универсальную функцию для извлечения и вставки (удалить и изменить). ) данные.
Вся сортировка, фильтрация должны выполняться локально в памяти.
Но я делаю то, что могу, на стороне сервера (sqlserver).
Зачем мне загружать все статьи (со всеми полями) из базы данных, если мне нужны только заголовок и аннотация?