Я реализую шаблон репозитория как часть сайта ASP.NET MVC. Большинство примеров, которые я видел в репозиториях, довольно просты. Например, типичный абстрактный интерфейс репозитория.
public interface IRepository<TEntity>
{
IQueryable<TEntity> All();
TEntity FindBy(int id);
TEntity FindBy(Expression<Func<TEntity, bool>> expression);
IQueryable<TEntity> FilterBy(Expression<Func<TEntity, bool>> expression);
bool Add(TEntity entity);
bool Update(TEntity entity);
bool Delete(TEntity entity):
}
Мне ясно, как использовать такой репозиторий для добавления, обновления, удаления или получения объектов одного типа. Но как вы справляетесь с созданием и управлением отношениями "один ко многим" или "многие ко многим" между разными типами?
Скажем, у вас есть тип Item
, где каждому элементу присваивается Category
. Как бы вы могли выполнить это задание через репозиторий? Должно ли это соответствовать методам Update(Category c)
и/или Update(Item i)
, чтобы выяснить, какие отношения необходимо внести в обновляемый элемент или из него? Или должен быть явный метод AssignCategoryToItem(Item i, Category c)
?
Если это имеет значение, я использую Fluent NHibernate для реализации моих конкретных репозиториев.