Я реализую шаблон репозитория как часть сайта 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
, где каждый элемент назначен в категорию
. Как бы вы сделали это назначение через репозиторий? Должно ли это быть до методов Update (Категория c)
и / или Update (Item i)
, чтобы выяснить, какие отношения должны быть установлены с или от обновляемого элемента? Или должен быть явный метод AssignCategoryToItem (Item i, Category c)
?
Если это имеет значение, я использую Fluent NHibernate для реализации моих конкретных репозиториев.