Вопрос про EF Core 5
От: Lev_Limin  
Дата: 04.12.20 07:43
Оценка:
Есть база в которой много таблиц с одинаковой структурой, и с наименованиями в стиле object_####_
Можно ли как-то одной модели маппить все эти таблицы разом, а не делать 100500 моделей по количеству таблиц?
Что бы потом можно было работать с нужной таблицей по наименованию.

Я пока вышел из ситуации через rawquery. Если в ef core такое невозможно, то какие есть альтернативы с подобным функционалом?
Re: Вопрос про EF Core 5
От: rameel https://github.com/rsdn/CodeJam
Дата: 04.12.20 08:09
Оценка: 1 (1) +2
Здравствуйте, Lev_Limin, Вы писали:

L_L>Если в ef core такое невозможно, то какие есть альтернативы с подобным функционалом?


Про EF не скажу, но в linq2db это можно сделать просто
db.GetTable<Model>().TableName("object_19")
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Отредактировано 04.12.2020 8:10 rameel . Предыдущая версия .
Re: Вопрос про EF Core 5
От: Shmj Ниоткуда  
Дата: 04.12.20 11:34
Оценка: +1
Здравствуйте, Lev_Limin, Вы писали:

L_L>Есть база в которой много таблиц с одинаковой структурой, и с наименованиями в стиле object_####_


Ну вот нафига было такое делать? Должна быть 1 таблица с доп. полем ObjectType
Re: Вопрос про EF Core 5
От: pilgrim_ Россия  
Дата: 04.12.20 15:14
Оценка: 1 (1)
Здравствуйте, Lev_Limin, Вы писали:

L_L>Есть база в которой много таблиц с одинаковой структурой, и с наименованиями в стиле object_####_

L_L>Можно ли как-то одной модели маппить все эти таблицы разом, а не делать 100500 моделей по количеству таблиц?
L_L>Что бы потом можно было работать с нужной таблицей по наименованию.

1) Сложный путь, обычно подходит когда в уже существующей базе нужно разбить таблицу на несколько (либо собрать из нескольких) по какому-то критерию (партиционировать).

MS SQL Server (возможно и в других СУБД есть такой функционал): Если в таблицах есть столбец уникально идентифицирующий данные в этой таблице (ObjectType, ObjectId, дата,...) общий для всех записей в конкретной таблице, и если есть возможность модифицировать схему базы, то можно использовать т.н. Partitioned Views:

-во всех таких таблицах создать констрейнты на этот столбец (столбец партиционирования)
-создать вьюху, напр. Objects, объединяющую с пом. UNION ALL все эти таблицы
-в запросах работать только с этой вьюхой, используя фильтр по этому столбцу, SQL Server сам поймет, для какой таблицы нужно выполнить запрос.

ps: есть нюансы (и немало, см. по ссылке выше), напр. если столбец партиционирования не входит в PK, то для insert/update/delete придется написать тригеры для вьюхи

2) По идее универсальный, подойдет как к EF, так и к linq2db
— Создать интерфейс, напр. IObjectTable, который будут реализовывать все 100500 нужных таблиц
— Код работы с таблицами писать обобщенно:
string[] SelectSomethingFromTable<TObjectTable>(...) where TObjectTable : IObjectTable
{
...
 var table = dbContext.Set<TObjectTable>() [EF]/dbContext.GetTable<TObjectTable>() [linq2db];
...
}


3) Про linq2db выше уже сказали: db.GetTable<..>().TableName(..)
Re[2]: Вопрос про EF Core 5
От: Lev_Limin  
Дата: 05.12.20 18:06
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, Lev_Limin, Вы писали:


L_L>>Есть база в которой много таблиц с одинаковой структурой, и с наименованиями в стиле object_####_


S>Ну вот нафига было такое делать? Должна быть 1 таблица с доп. полем ObjectType


Сделано было очень давно, но проектов, которые используют такую структуру, очень много.
Re[3]: Вопрос про EF Core 5
От: Danchik Украина  
Дата: 06.12.20 12:49
Оценка: 1 (1) +1
Здравствуйте, Lev_Limin, Вы писали:

L_L>Здравствуйте, Shmj, Вы писали:


S>>Здравствуйте, Lev_Limin, Вы писали:


L_L>>>Есть база в которой много таблиц с одинаковой структурой, и с наименованиями в стиле object_####_


S>>Ну вот нафига было такое делать? Должна быть 1 таблица с доп. полем ObjectType


L_L>Сделано было очень давно, но проектов, которые используют такую структуру, очень много.


Все правильно, так человеки избавлялись от локов таблиц. Если у вас такая структура, то EF Core вам не светит.
В linq2db это встроено по умолчанию, а EF придется постоянно новый контекст прокидывать с новой моделью. А это значит что одновременно с двумя такими таблицами вы работать не сможете.
Re: Вопрос про EF Core 5
От: varenikAA  
Дата: 08.12.20 06:17
Оценка: -1
Здравствуйте, Lev_Limin, Вы писали:


L_L>Я пока вышел из ситуации через rawquery. Если в ef core такое невозможно, то какие есть альтернативы с подобным функционалом?


Dapper + Dynamic Object ?
☭ ✊ В мире нет ничего, кроме движущейся материи.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.