Репозиторий, который обращается к нескольким таблицам - PullRequest
0 голосов
/ 10 октября 2011

Эта модель упрощена, используется только для демонстрации.

В моём приложении получено:

Данные

public class Product
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public Category Category { get; set; }
}

public class Category
{
    public Guid Id { get; set; }
    public string Name { get; set; }
}

Репозиторий

public interface IRepository<T>
    where T : class
{
    T Add(T entity);
    T Remove(T entity);
    IQueryable<T> GetAll();
    int Save();
}

public class ProductRepository : IRepository<Product>
{
    public Product Add(Product entity) { ... }
    public Product Remove(Product entity) { ... }
    public IQueryable<Product> GetAll() { ... }
    public int Save() { ... }
}

public class CategoryRepository : IRepository<Category>
{
    public Category Add(Category entity) { ... }
    public Category Remove(Category entity) { ... }
    public IQueryable<Category> GetAll() { ... }
    public int Save() { ... }
}

Службы

public interface ICategoryService
{
    Category Add(Guid gidProduct, Category category);
}

public class CategoryService : ICategoryService
{
    public Category Add(Guid gidProduct, Category category){ ... } //Problem here

    readonly IRepository<Category> _repository;

    public CategoryService(IRepository<Category> repository)  //Problem here
    {
        _repository = repository;
    }
}

Поскольку у меня есть хранилище для каждого класса, когда мне нужна информация из другого хранилища в моем сервисе, что мне делать?

В приведенном выше примерев моем слое обслуживания у меня есть метод Add продукта (где я нашел код для него) и category.

Проблема в том, что я делаю поиск в репозитории продуктов длявосстановить его, но в моей категории обслуживания нет хранилища продуктов. , как решить эту проблему?

1 Ответ

1 голос
/ 10 октября 2011

Сначала вам нужно создать репозиторий для каждого агрегатного корня, а не для каждого класса.

и если вам нужно получить доступ к нескольким репозиториям в вашей службе, просто вы зависите от них всех, тогда вы можете добавить их в качестве параметров в конструктор для внедрения зависимостей.

public CategoryService(CategoryRepository  categoryRepository, ProductRepository productRepository) 
{
    _categoryRepository = categoryRepository;
    _productRepository = productRepository;
}
...