Динамическое обращение к модели таблицы в EntityFrameworkCore возможно?
Всем привет. Я делаю веб-приложение Blazor. Я уже подключил базу данных и в моем проекте относительно много моделей таблиц из нее. Я хотел бы выполнять инъекцию не к определенной модели таблицы, а динамически. То-есть прямо в коде выбирается, из какой таблицы извлекутся данные. Тк все мои таблицы имеют одну и ту же структуру и отличаются лишь названием, я не исклчаю, что такой способ есть.
Подскажите пожалуйста. Заранее спасибо!
Подпишусь, тоже интересно.
Первое что приходит на ум - исполнять селект и мапить руками, подставляя имя таблицы.
Второе - в DbContext реализовать метод GetDbSet, который достанет DbSet (или IQueryable) нужного типа.
Сразу уточню, что я новичок в программировании. Есть идея - в отдельном классе установить конструкцию свич кейс, которая бы принимала название таблицы, а отдавала модель(тип). Но моя страсть к автоматизации не может такого позволить.
Для этого вы можете использовать GenericRepository pattern, а так же использовать метод .Set(), доступен от объекта DbContext'а, который будет возвращаться вам объект DbSet указанного типа
Прошу прощения за банальную просьбу. Можете пожалуйста, написать пример патерна. Я делал все через встроенные инструменты Visual Studio по гайду индийского коллеги и потому не сильно понял пройденную тему.
Вот пример моей модели(типа):
[Table("test1", Schema = "public")]
public partial class test1
{
public long? id { get; set; }
public string address { get; set; }
public float? data { get; set; }
[Key]
[Required]
public DateTime gettime { get; set; }
[Column("unit")]
public string unit1 { get; set; }
public string name { get; set; }
}
И вот таких моделей у меня достаточно, изменяется только номер таблицы.
Как мне сделать общую модель? Заранее спасибо!
Boobert, это не узконаправленные темы, а очень распространённые явления, но они требуют изучения, по этому я не смогу вам его написать, т.к. это займёт много времени. Вот вам пару ссылок:
Насколько я осведомлен (прочитал пару статей), запросы являются небезопасными. Для этого я и решил использовать инъекции.
Не могли бы Вы показать какой-нибудь пример, как можно обратиться таким образом к таблице?
Если коротко, то суть в том, что пользователь выбирает в выпадающем списке название таблицы, которое передается в этот метод. И в этом методе, нужно извлечь определенные данные из указанной таблицы. И вот , я, как раз думаю - как это сделать...
Заранее спасибо!
Чуть ниже, в комментарии на ответ другого пользователя, я указал структуру базы данных (словами, тк диаграммы строить еще не умею). По такому вот сценарию, я написал код, который получает логин пользователя и проверяет его наличие в одной из таблиц, где указано - какие кому доступны таблицы. Далее выпадающий список заполняется элементами, которые получены из выше указанной таблицы. Пользователь выбирает какой либо вариант и дальше программе нужно извлесь данные из выбранной таблицы. Было бы славно, если бы можно было динамически делать селект к указанной модели, например tablemodel[i], где i равно 1, а у нас как раз есть модель таблицы "tablemodel1" :D
Если у вас таблицы отличаются только названием, то что-то пошло явно не так при разработке структуры БД. Почему не сделать то же самое, но с доп.столбцом и нормальными индексами на таблице?
В моей бд есть таблицы с одинаковым контекстом. Это нужно для хранения одинаковых данных с разных устройств. Я даже не задумывался над единой таблицей, в которой будет еще один столбик. Плюс к тому, разные таблицы будут нужны для определенных пользователей и важно сохранение конфидециальности. Вообщем решил сделать так.
В таком случае лучше мой вариант или все же использование одной таблицы для абсолютно всех данных (их много) ? Заранее спасибо за ответ!
Вообще идея такая, что мне нужно передать пользователю некоторые данные. Плюс-минус они все одинаковые (типы данных), поэтому и таблицы идентичные. Например - показания температуры записываются в одну таблицу, показыния влажности в другую. А так же должно быть несколько пользователей, которые имеют доступ к своим таблицам. Изначально была идея сделать для каждого пользователя отдельную базу данных для наглядности. Но мне лень со всем этим разбираться. Поэтому я просто сделал одну базу данных именно для хранения и передачи данных с определенных устройств. Так же у меня есть база данных с аккаутами пользователей, где указано какие таблицы из бд с данными, предназначаются для него(таблицы в строковом формате через запятую:) ). Нормальная иерархия в бахе данных? Или лучше сменить идею, пока не поздно? Подскажите, пожалуйста!
Booba Yo, ну я бы делал общие таблицы, а с тем кому, что и как раздавать - это вопросы к API: он и данные как нужно отфильтрует, и ненужного никому не отдаст.