Можно ли обращаться к модели таблицы динамически в EntityFrameworkCore?

Как можно осуществить динамическую инъекцию моделей таблицы при работе с веб-приложением Blazor, учитывая, что все таблицы имеют одинаковую структуру, отличаясь только названием?
Изображение к вопросу
  • 26 декабря 2023 г. 9:07
Ответы на вопрос 2
Да, в Entity Framework Core можно обращаться к модели таблицы динамически. Однако, в C# также можно использовать анонимные типы для работы с проекциями данных таблицы.

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

Для этого можно создать универсальный класс-репозиторий, который будет работать с таблицами, имеющими одинаковую структуру:

```csharp
public class GenericRepository<T> where T : class
{
    private readonly DbContext _dbContext;
    private readonly DbSet<T> _dbSet;

    public GenericRepository(DbContext dbContext)
    {
        _dbContext = dbContext;
        _dbSet = _dbContext.Set<T>();
    }

    public async Task<List<T>> GetAllAsync()
    {
        return await _dbSet.ToListAsync();
    }

    // Дополнительные методы для работы с таблицей
}
```

Затем, в вашем веб-приложении Blazor, вы можете использовать этот репозиторий для работы с различными таблицами, передавая тип таблицы в качестве параметра:

```csharp
public class SomePage : ComponentBase
{
    private List<dynamic> _tableData;
    private readonly GenericRepository<dynamic> _repository;

    public SomePage(GenericRepository<dynamic> repository)
    {
        _repository = repository;
    }

    protected override async Task OnInitializedAsync()
    {
        _tableData = await _repository.GetAllAsync();
    }
}
```

Таким образом, вы сможете инъецировать модели таблицы динамически на основе их названия и использовать их для работы с данными в вашем веб-приложении Blazor.
Так пропишите всего одну модель, а запрос сделайте через 
.FromSqlRaw(...)
Похожие вопросы