Динамический LINQ2SQL для не отображенной таблицы - PullRequest
1 голос
/ 03 декабря 2009

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

Я знаком с тем, как создавать запросы Dynamic LINQ, однако для всех известных мне методов требуется существующий сопоставленный объект в объекте DataContext. Поскольку пользователи могут создавать пользовательские таблицы во время выполнения (с помощью динамического строительного SQL), в любом DataContext нет сопоставленного объекта.

Есть ли способ динамического создания объекта DataContext и сопоставленного объекта во время выполнения для использования с динамическим запросом Linq?

Есть ли другой способ сделать это, не прибегая к строковому построению sql?

1 Ответ

0 голосов
/ 03 декабря 2009

Для создания классов данных Linq to SQL доступно несколько шаблонов T4. Возможно, вы можете адаптировать их.

http://www.pnpguidance.net/Post/LINQToSQLCodeGenerationT4TemplatesTutorials.aspx

Существует два способа генерации сборки без использования компилятора Microsoft C # или Visual Studio. Первый - использовать System.Reflection.Emit для создания пользовательской сборки. Это может быть проще, чем кажется; взгляните на следующую надстройку для Reflector:

ReflectionEmitLanguage Надстройка для отражателя
http://reflectoraddins.codeplex.com/wikipage?title=ReflectionEmitLanguage&referringTitle=Home

То, что делает надстройка, - это взять существующую сборку IL и создать код C #, содержащий вызовы System.Reflection.Emit, которые потребуются для генерации того же IL, что и компилятор C #. По сути, вы должны создать сборку, содержащую прототип DataContext, и запустить ее в своих методах. Тогда у вас будет класс (или лучшая его часть), который будет генерировать сборку IL напрямую. Весь этот код с открытым исходным кодом.

Другая вещь, которую вы можете сделать, это попробовать использовать Mono C # компилятор (который в отличие от компилятора Microsoft C # может называться службой) для генерации вашей сборки IL. Компилятор C # также с открытым исходным кодом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...