Вы не должны использовать Entity Framework в ASP.NET Core.У вас есть внедрение зависимостей и правильно настроенный контекст EF, поэтому вы должны использовать это.По сути это означает:
- Никогда не создавайте контекст базы данных вручную, используя
new
.Всегда вставляйте контекст как зависимость. - Не переопределяйте метод
OnConfiguring
в базе данных для настройки контекста.Ожидается, что конфигурация будет передана как DbContextOptions
, так что сам контекст не отвечает за настройку конфигурации. - Избегайте пустого конструктора для контекста вашей базы данных, чтобы избежать неправильного использования, когда контекст остается ненастроенным.
Таким образом, ваш код должен выглядеть следующим образом:
public class SqliteDbContext : DbContext
{
public SqliteDbContext(DbContextOptions<SqliteDbContext> options) : base(options)
{ }
// define your database sets
public DbSet<Entity> Entities { get; set; }
}
public class CRUDService<T>
{
private readonly SqliteDbContext db;
CRUDService(SqliteDbContext database)
{
db = database;
}
public List<T> Read()
{
return db.Set<T>().ToList();
}
}
SqliteDbContext
будет автоматически предоставлен контейнером ввода зависимостей.Вам просто нужно ввести зависимость для ее правильного разрешения.
Кстати.Я бы вообще предложил вам избегать (общего) шаблона хранилища.Контекст базы данных в Entity Framework уже является единицей работы, и каждый набор баз данных уже является хранилищем.Так что вы можете просто использовать это напрямую.Вы мало что выиграете, добавив еще одну абстракцию поверх нее, особенно общую, поскольку это всегда будет вас ограничивать.
Кроме того, вам следует переименовать SqliteDbContext
во что-то, что фактически описывает, какие данные в контекстеуправляет.Контекст не должен заботиться о том, какой базовый поставщик баз данных используется.