|
Селектор сущности в Entity Framework - как?
|
|||
---|---|---|---|
#18+
Когда пишешь запрос строкой, то можно было составть эту строку динамически: select "" from ""..., где вместо кавычек можно было подставлять сущности и её параметры. В результате можно было написать один запрос-шаблон и вставлять в него нужные параметры. Как с этим обстоят дела в Entity Framework? В данный момент я пишу так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2013, 09:52 |
|
Селектор сущности в Entity Framework - как?
|
|||
---|---|---|---|
#18+
Выглядит хреново. Знаю, что в Entity Framework можно тоже строку запросом послать через Database.SqlQuery, но тогда вся эта канва с ORM теряет смысл - нет готовой типизации результатов запроса, плюс контекст не отслеживает (как сказано в комментарии к этой функции) резальтаты таких запросов. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2013, 09:56 |
|
Селектор сущности в Entity Framework - как?
|
|||
---|---|---|---|
#18+
А, да, забыл добавить, что действия в кейсах свича однотипные, типа записать результаты в одну и ту же коллецию и т. п. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2013, 09:57 |
|
Селектор сущности в Entity Framework - как?
|
|||
---|---|---|---|
#18+
Есть Dynamic LINQ . Но это всё следствие неправильной структуры данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2013, 09:58 |
|
Селектор сущности в Entity Framework - как?
|
|||
---|---|---|---|
#18+
Ещё рефлекшеном можно. Но лучше структуру данных поправить. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2013, 09:59 |
|
Селектор сущности в Entity Framework - как?
|
|||
---|---|---|---|
#18+
Ещё можно обобщить доступ к таблицам через Concat/Union, и делать запросы к объединению. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2013, 10:00 |
|
Селектор сущности в Entity Framework - как?
|
|||
---|---|---|---|
#18+
user7320Когда пишешь запрос строкой, то можно было составть эту строку динамически: select "" from ""..., где вместо кавычек можно было подставлять сущности и её параметры. В результате можно было написать один запрос-шаблон и вставлять в него нужные параметры. Как с этим обстоят дела в Entity Framework?EF направлен как раз на уход от подобной практики. user7320Знаю, что в Entity Framework можно тоже строку запросом послать через Database.SqlQuery, но тогда вся эта канва с ORM теряет смысл - нет готовой типизации результатов запросаКак это нет? SqlQuery принимает тип как Of TElement или System.Type и пытается привести результат запроса к этому типу. Нужно либо сделать базовый класс, умеющий выполнять однотипные действия с разными объектами, и унаследовать классы модели Cars и Tables от него, а типизировать проще пареной репы — передать Me.GetType (не знаю как это в вашем си-диезе) в SqlQuery. Второй вариант, ими же реализовать интерфейс, описывающий необходимые действия. Правда суть его сводится к тому, что реализация свича раскидывается по классам. В блоке Using останется неизменный механизм, работающий либо с базовым классом, либо с интерфейсом. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2013, 11:15 |
|
Селектор сущности в Entity Framework - как?
|
|||
---|---|---|---|
#18+
Алексей КЕсть Dynamic LINQ .Спасибо, полезная штука. Она + тынц + шаблонизатор = движок универсального кодогенератора. Профит. Для работы с базами она по-моему противопоказана. Похерена типизация с интеллисенсом, но сохранены, а может и приумножены минусы типа производительности. Лучше уж чистое ADO. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2013, 13:31 |
|
Селектор сущности в Entity Framework - как?
|
|||
---|---|---|---|
#18+
Алексей КЕсть Dynamic LINQ . Но это всё следствие неправильной структуры данных. Хе-хе. У меня, оказывается, эта вкладка открыта в браузере уже года полтора-два, только затерялась. )) Насчёт структуры данных. Ну а чего там можно придумать, чтобы можно было выбирать сущности и их атрибуты чисто запросом? EAV? Так его не везде применять можно и нужно. Да возьмём простой пример - две таблицы (как у меня в примере в первом посте) и только. Тут EAV не нужен, но селектор сущности и атрибутов охота. AntonariyДля работы с базами она по-моему противопоказана. Похерена типизация с интеллисенсом Эмм... Имена параметров и сущностей можно через рефлексию и выражения (Expression) вытащить. Но вот почему они сделали фразы в Where полностью строковыми, непонятно. Мне, например, уже достаточно, чтобы имена сущностей и их атрибутов чтобы можно было динамически задавать, а вот всякие проверки и действия уже лишнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2013, 14:11 |
|
Селектор сущности в Entity Framework - как?
|
|||
---|---|---|---|
#18+
Antonariyно сохранены, а может и приумножены минусы типа производительности. Лучше уж чистое ADO. Так чистое ADO, вроде, ничего не типизирует, деревья выражений не создаёт. Поэтому и быстрее. За удобство заплатили скоростью (весь Дотнет на этом принципе построен). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2013, 14:13 |
|
Селектор сущности в Entity Framework - как?
|
|||
---|---|---|---|
#18+
user7320 Но вот почему они сделали фразы в Where полностью строковыми, непонятно.А как иначе? user7320 Так чистое ADO, вроде, ничего не типизирует, деревья выражений не создаёт. Поэтому и быстрее. За удобство заплатили скоростью (весь Дотнет на этом принципе построен).Ты так говоришь, как будто открыл великую тайну. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2013, 15:31 |
|
Селектор сущности в Entity Framework - как?
|
|||
---|---|---|---|
#18+
Antonariyuser7320 Так чистое ADO, вроде, ничего не типизирует, деревья выражений не создаёт. Поэтому и быстрее. За удобство заплатили скоростью (весь Дотнет на этом принципе построен).Ты так говоришь, как будто открыл великую тайну. Тогда я не понимаю недовольных возгласов о производительности кода от людей, которые понимают, что эти вещи были придуманы не для производительности кода. Причём возгласы вида (я не вас имею ввиду, а вообще иногда встречаются) "фу гавно нирикамедную этат фремворк! ни магли сделать фсё как в крузис или в джаве". ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2013, 16:48 |
|
Селектор сущности в Entity Framework - как?
|
|||
---|---|---|---|
#18+
user7320Насчёт структуры данных. Ну а чего там можно придумать, чтобы можно было выбирать сущности и их атрибуты чисто запросом?Традиционно, общие поля вынести в центральную таблицу. Завязать на неё таблицы со специфичными полями отношением один-к-одному. В центральную таблицу добавить поле "тип" или определять тип по наличию записи в "специфичной" таблице. А если у них нет общих полей - тогда постановка задачи сомнительна, или я её не понимаю. user7320Тут EAV не нужен, но селектор сущности и атрибутов охота.Делаешь универсальный просмотрщик аля PropertyGrid? Если да, то LINQ тут только мешает. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2013, 17:27 |
|
Селектор сущности в Entity Framework - как?
|
|||
---|---|---|---|
#18+
Алексей Кuser7320Насчёт структуры данных. Ну а чего там можно придумать, чтобы можно было выбирать сущности и их атрибуты чисто запросом?Традиционно, общие поля вынести в центральную таблицу. Завязать на неё таблицы со специфичными полями отношением один-к-одному. В центральную таблицу добавить поле "тип" или определять тип по наличию записи в "специфичной" таблице. А если у них нет общих полей - тогда постановка задачи сомнительна, или я её не понимаю. Приведу пример. У меня так и есть - наследование и таблица с типами - см. вложение. Затем, в коллеции (скажем, список-листбокс; и вообще, речь о WPF, если что) у меня намешаны книги и диски - суть, продукты. Не спрашивайте, зачем намешал, на самом деле ситуация сложнее, но допустим, что так. Кликаем на листбокс и выполняется команда, которая должна запросить данные по выбранному продукту. У команды только один параметр, и я передаю туда собственно выбранный предмет (SelectedItem). Я могу сделать и без команд, а, скажем, привязав свойство IsSelected модели представления к IsSelected листбокса. В любом случае, я получаю в код объект, который представляет собой либо книгу, либо диск (т. е. не просто продукт, а прямо потомковый тип известен). Далее всё как в первом посте - тип продукта известен, сам экземпляр типа (или его айди) известен - могу сделать запрос. Но вот как теперь составить универсальный запрос в рамках строго типизированного ORM при такой схеме БД, чтобы и к книгам (или машинам), и к дискам (или столам) можно было обращаться в БД? Или менять схему БД? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2013, 18:42 |
|
Селектор сущности в Entity Framework - как?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2013, 19:22 |
|
Селектор сущности в Entity Framework - как?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2013, 19:25 |
|
Селектор сущности в Entity Framework - как?
|
|||
---|---|---|---|
#18+
user7320Но вот как теперь составить универсальный запрос в рамках строго типизированного ORM при такой схеме БД, чтобы и к книгам (или машинам), и к дискам (или столам) можно было обращаться в БД? Или менять схему БД?Если строго подходить к задаче, можно делать запрос только к общей части, в данном случае к таблице Product, и возвращать в данном случае только общие поля Type и Name. Это если нужно отобразить данные в табличном виде. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2013, 13:41 |
|
|
start [/forum/topic.php?fid=17&fpage=23&tid=1349929]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
67ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
others: | 276ms |
total: | 464ms |
0 / 0 |