Еще раз большое спасибо Дейву за публикацию его мыслей по этому вопросу.
Вот краткий обзор моих исследований на данный момент:
Я отказываюсь от LINQ to Entities в пользу LINQ to SQL - похоже, мне будет легче с этим проектом.
Итак, вот мои вопросы, ответы и комментарии, которые у меня есть до сих пор:
- Возможно ли использовать только строку подключения во время выполнения, чтобы
возможность создавать объектную модель и
обращаться к элементам БД в наборах -
например, список всех
таблицы, представления, функции и sprocs?
@ Дейв - на самом деле это своего рода возможно - я взглянул на раздел «Как работает LINQPad» на официальном сайте LINQPad, и получил ответ: генерируйте классы во время выполнения, используя Reflection.Emit, чтобы создать след в памяти методов, свойств и их атрибутов, а затем создавать классы на их основе. Кроме того, я иду этот совет от модератора на MSDN: http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/471c8672-0a77-4186-b1d3-844abd8a822b
Таким образом, я думаю, что можно получить объектную модель во время выполнения.
- Можно ли использовать элементы вышеупомянутых списков в
методы расширения, чтобы я мог построить
дерево выражений?
3.Могу ли я использовать класс Metadata Workspace и ItemCollections по порядку
чтобы получить эти списки из
база данных, имеющая только CSDL, SSDL
и файлы MDL (но без классов сущностей)?
Полагаю, я не задал здесь правильный вопрос - я хотел сказать следующее:
Во время выполнения вы знаете, что существует таблица Table со столбцами Col1, Col2 и Col3. В простом приложении LINQ to SQL код будет
Table.Select(t => t.Col1, t.Col2, Col3)
Однако я ищу это: пользователь выбирает, какие столбцы участвовать в выборе, поэтому окончательный выбор будет выглядеть примерно так:
foreach(String UsersChosenColumn in TableColumnsArray)
XDocumentXElement(UsersChosenColumn, (Table.Select(t => t.TableColumnsArray[UsersChosenColumn]))
Однако этого нельзя сделать, потому что выяснить имя столбца недостаточно - знание типа столбца - это то, что может выполнить работу. Я смотрю на это прямо сейчас, но только с точки зрения LINQ to SQL, а не LINQ to Entities - там может быть другая логика.
@ Дейв: Вот сценарий для проекта:
Пользователь хочет получить XML на следующих данных:
Orders.Name, Order.Price, Orders.Products.Name, Orders.Products.Manufacturer Где Orders.OrderID = 1234.
Вот что должно быть на выходе:
<Order>
<Name>Some Order Name</OrderName>
<Price>Some Price</Price>
<Products>
<Product>
<Name>Some Product Name</Name>
<Manufacturer>Shady Company Inc</Manufacturer>
</Product>
<Product>
<Name>Some Product Name 2</Name>
<Manufacturer>Another Company (TM)</Manufacturer>
</Product>
</Products>
</Order>
Поскольку я уже поместил теги EF в этот вопрос, я закрою его, так как теперь я ищу ответы LINQ to SQL, а не EF.
Если я спрошу другие очереди об этой теме, я попытаюсь прикрепить к ней подходящие теги LINQ to SQL.
Всего наилучшего, Борислав.