|
EF6 динамическое применение условий во всех таблицах
|
|||
---|---|---|---|
#18+
Я использую EF6 db first. в модель данных загружено несколько таблиц в каждой из которых имеется столбец [user], необходимо реализовать возможность динамического получения всех доступных таблиц в datacontext,каждой из них прописать условие datacontext.t1.Where(row=>row.User=="user") datacontext.t2.Where(row=>row.User=="user") datacontext.t3.Where(row=>row.User=="user") но заранее не зная о t1,t2 и t3 c помощью строки Код: c# 1.
я получаю экземпляр таблицы t1, но у меня не получается применить к нему linq запрос Код: c# 1.
не сработает, так как для where требуется IQuariable<TSource>, tempTable я могу преобразовать только в IQuariable. подскажите как указать TSource, если по факту его нужно получить динамически, но я не знаю как ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 17:20 |
|
EF6 динамическое применение условий во всех таблицах
|
|||
---|---|---|---|
#18+
навесь (с помощью partial классов) на эти сущности интерфейс IUser, в котором будет свойство string User дальше можно запрашивать через тип Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 17:34 |
|
EF6 динамическое применение условий во всех таблицах
|
|||
---|---|---|---|
#18+
Соответственно, если тип будет заведомо IUser (например чрез констрейнты), то и Cast не потребуется ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 17:36 |
|
EF6 динамическое применение условий во всех таблицах
|
|||
---|---|---|---|
#18+
Shocker.Proнавесь (с помощью partial классов) на эти сущности интерфейс IUser, в котором будет свойство string User дальше можно запрашивать через тип Код: c# 1.
А что такое T1Type и где его брать? в этом основной вопрос ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 21:49 |
|
EF6 динамическое применение условий во всех таблицах
|
|||
---|---|---|---|
#18+
Это тип, набор которых возвращает datacontext.t1 Всё зависит от того, где ты берешь строку "t1". Возможно, там следует переделать, чтобы этот код оперировал типами, а не строками, и вообще - строковое представление свойства - плохой путь, как правило. А если нужно тупо все таблицы перебрать - то тут достаточно просто перебрать все типы, реализующие IUser ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 21:54 |
|
EF6 динамическое применение условий во всех таблицах
|
|||
---|---|---|---|
#18+
Shocker.Pro, Идея в том что я заранее не знаю ни количества таблиц ни их название, знаю только что в каждой есть столбец USER. Я перебираю все таблицы в contexte, но вот как потом к ним обращаться я не понимаю. Через GetValue я получаю DbSet, но в виде object, и мне не ясно как преобразовать из него в класс к которому можно будет сделать запрос where ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 22:18 |
|
EF6 динамическое применение условий во всех таблицах
|
|||
---|---|---|---|
#18+
lex452, View если доступ к базе есть ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 22:22 |
|
EF6 динамическое применение условий во всех таблицах
|
|||
---|---|---|---|
#18+
Petro123lex452, View если доступ к базе есть Можно поподробнее? доступ есть ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 22:26 |
|
EF6 динамическое применение условий во всех таблицах
|
|||
---|---|---|---|
#18+
Хорошо, но ты можешь по формальному признаку выделить все классы Entity? Например по неймспейсу? Если да - ты можешь их перебрать, дергая каждый раз datacontext.Set<T1Type>, тебе не нужно перебирать свойства контекста для этого. Далее, ты получаешь DbSet<TypeN>. И если ты не хочешь воспользоваться моим советом сделать интерфейс IUser, ну можно тогда приделать динамический фильтр Where ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 22:28 |
|
EF6 динамическое применение условий во всех таблицах
|
|||
---|---|---|---|
#18+
Shocker.Proну можно тогда приделать динамический фильтр WhereПримерно так Код: c# 1.
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 22:30 |
|
EF6 динамическое применение условий во всех таблицах
|
|||
---|---|---|---|
#18+
Shocker.Pro, Опять повторюсь, но я не понимаю что такое T1Type, и откуда мне его взять. Таблицы у меня разноформатные, но есть общий набор столбцов, если это конечно важно. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 22:33 |
|
EF6 динамическое применение условий во всех таблицах
|
|||
---|---|---|---|
#18+
lex452Опять повторюсь, но я не понимаю что такое T1Type, и откуда мне его взять.Это тип Entity. Тип записи в твоей таблице. Тип, который находится внутри угловых скобочек в твоем IQueryable<>. Так понятно? Где взять я уже писал. Либо к ним всем приделать интерфейс IUser, а потом выбрать все типы, реализующие этот интерфейс. Либо тупо перебрать все типы, находящиеся в определенном неймспейсе, если в нем нет ничего, кроме нужных тебе Entity ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 22:37 |
|
EF6 динамическое применение условий во всех таблицах
|
|||
---|---|---|---|
#18+
lex452не сработает, так как для where требуется IQuariable<TSource>,О, вот. T1Type - это твой TSource для таблицы "t1" ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 22:39 |
|
EF6 динамическое применение условий во всех таблицах
|
|||
---|---|---|---|
#18+
lex452Petro123lex452, View если доступ к базе есть Можно поподробнее? доступ естья делал в постгри. Select к системной табле где имена таблиц. Формируется вьюха Select user from t1 Union all Select user from t2 ... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 22:39 |
|
EF6 динамическое применение условий во всех таблицах
|
|||
---|---|---|---|
#18+
Или какой там тебе кортеж нужен в итоге? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 22:41 |
|
EF6 динамическое применение условий во всех таблицах
|
|||
---|---|---|---|
#18+
Petro123lex452пропущено... Можно поподробнее? доступ естья делал в постгри. Select к системной табле где имена таблиц. Формируется вьюха Select user from t1 Union all Select user from t2 ... Это не выход, как я уже писал таблицы не одинаковые и фильтровать нужно каждую по отдельности ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 22:41 |
|
EF6 динамическое применение условий во всех таблицах
|
|||
---|---|---|---|
#18+
Shocker.Prolex452не сработает, так как для where требуется IQuariable<TSource>,О, вот. T1Type - это твой TSource для таблицы "t1" Логически я это понимаю, но как его вытащить из контекста я не понимаю ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 22:43 |
|
EF6 динамическое применение условий во всех таблицах
|
|||
---|---|---|---|
#18+
lex452но как его вытащить из контекстаВ принципе, его можно вытащить и из контекста с помощью рефлексии, разобрав твое .GetProperty("t1") Только сначала объясни, чем тебе не нравятся два других способа? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 22:46 |
|
EF6 динамическое применение условий во всех таблицах
|
|||
---|---|---|---|
#18+
С интерфейсом и фильтром я согласен, буду пробовать. Но как использовать datacontext.Set<T1Type> если я в текущий момент не знаю T1Type, я не понимаю. Или про какие 2 других способа речь мне не понятно ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 22:49 |
|
EF6 динамическое применение условий во всех таблицах
|
|||
---|---|---|---|
#18+
Если не сложно приведите пример ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 22:50 |
|
EF6 динамическое применение условий во всех таблицах
|
|||
---|---|---|---|
#18+
lex452Если не сложно приведите пример ну приведи пример двух твоих Entity (вместе с неймспейсами), чтобы можно было говорить предметно, используя твои конкретные наименования, а то как-то абстрактными словами у меня не получается донести ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 22:53 |
|
EF6 динамическое применение условий во всех таблицах
|
|||
---|---|---|---|
#18+
Shocker.Pro, public class MyDbContext : DbContext { public virtual DbSet<t1Row> t1{ get; set; } public virtual DbSet<t2Row> t2{ get; set; } public virtual DbSet<t3Row> t3{ get; set; } } кусок контекста нужно пробежаться по всем DbSet ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 22:57 |
|
EF6 динамическое применение условий во всех таблицах
|
|||
---|---|---|---|
#18+
lex452Это не выход, как я уже писал таблицы не одинаковые и фильтровать нужно каждую по отдельностивсе что делает linq можно сделать на sql. КОНКРЕТНЕЕ ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 22:57 |
|
EF6 динамическое применение условий во всех таблицах
|
|||
---|---|---|---|
#18+
lex452нужно пробежаться по всем DbSetзачем? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 22:58 |
|
|
start [/forum/topic.php?fid=17&msg=39730173&tid=1349154]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
57ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 182ms |
0 / 0 |