Создайте один сервис с BaseEntity для управления всей БД, .NET Core, EntityFramework - PullRequest
0 голосов
/ 26 января 2019

У меня нет особой проблемы, но дело в том, что я не знаю, возможно ли создать такой сервис:

У меня есть абстрактный базовый класс, содержащий только Id, ивсе классы (модели из БД) наследуются от этого класса и имеют свои свойства.

У меня вопрос: могу ли я иметь только один сервис, метод, который я могу использовать для управления всеми моими таблицами / моделями с помощью операций CRUD??

Вот мой репозиторий:

public class Repository : IRepository<db_context>
{
    private readonly db_context _dbContext;

    public Repository(db_context dbContext)
    {
        _dbContext = dbContext;
    }

    public T GetById<T>(int? id) where T : BaseEntity
    {
        return _dbContext.Set<T>().SingleOrDefault(e => e.Id == id);
    }

    public List<T> List<T>() where T : BaseEntity
    {
        return _dbContext.Set<T>().ToList();
    }

    public T Add<T>(T entity) where T : BaseEntity
    {
        _dbContext.Set<T>().Add(entity);
        _dbContext.SaveChanges();

        return entity;
    }
    ....
}

Любые идеи ..?

1 Ответ

0 голосов
/ 27 января 2019

Это очень возможно, я не понимаю, почему нет. Это в основном потому, что вы в основном просто переделываете то, что DbContext уже делает. Как упоминалось pinkfloydx33 , по той же причине я бы порекомендовал не использовать ее. Кроме того, этот вид абстракции никогда не работает в долгосрочной перспективе. Кроме того, вам могут понадобиться специальные функции, которые начнут получать ваш код довольно уродливо и трудно поддерживать. Если вы пытались создать какую-то форму упрощения, вы также можете рассмотреть функции расширения.

Как говорится, если у вас еще есть причина, еще раз, это очень возможно. Вы также можете использовать _dbContext.Add(entity) вместо _dbContext.Set<T>().Add(entity), поскольку .Set<T>() в этом случае кажется бессмысленным (то же самое для обновления).

...