Динамически создаваемый запрос LINQ to SQL без классов Entity - PullRequest
3 голосов
/ 16 марта 2011

LINQ2SQL довольно хорош. Легко создавать классы сущностей и использовать их.

а что если я не знаю во время компиляции ничего о базе данных и таблицах?

но мне нужно запросить таблицу "Foo" в "FooDb";

Могу ли я выполнить запросы Linq к БД без каких-либо классов Entity?

Не могли бы вы показать мне пример?

Ответы [ 4 ]

4 голосов
/ 16 марта 2011

Linq2Sql - это ORM - объектно-реляционный картограф .

Как таковая, она должна знать структуру базы данных, чтобы генерировать классы, с которыми вы можете взаимодействовать, прежде чем ваше приложение будет скомпилировано.

Короче говоря, то, что вы спрашиваете, невозможно с Linq2Sql или любым другим ORM, о котором я знаю.


Вы можете создать приложение, которое будет запрашивать системные таблицы и генерировать и загружать классы для вас, но я не знаю, как вы будете взаимодействовать с ними в коде, не зная заранее структуры.

0 голосов
/ 16 марта 2011

Хорошо. Как насчет WebMatrix.Data?

Если вам нужен легкий доступ к базе данных и вы не хотите беспокоиться об открытии соединения, закрытии и тому подобном. И вашему проекту не нужны строго типизированные сущности.

Вот что показал Джеффри Палермо из MVCConf. Кусок кода такой:

using WebMatrix.Data;

...

public IEnumerable<dynamic> Execute(){

   Database db = Database.Open("EasyTimeTracking");
   var employees= db.Query("select FullName, Startdate, EndDate from Employee");
   return employees;

}

Стоит ли использовать вместо старого способа работы с SQL в c #? Что ты думаешь?

0 голосов
/ 16 марта 2011

Нет, вы не можете построить свою объектную модель динамически или на лету.

Единственный связанный (и неоптимальный, нелогичный и трудный для понимания) способ сделать то, что вы хотите, это:

  • создать специальный оператор SQL. SELECT ID FROM Foo;
  • выполнить этот оператор, используя DataContext.ExecuteCommand()
0 голосов
/ 16 марта 2011

Где-то должны быть скомпилированные сущности, чтобы LINQ to SQL работал. Следовательно, единственный способ получить динамическую модель - это построить динамическую сборку, как это делает LINQPad. Это возможно, но это много работы. Кроме того, как будет выглядеть ваш запрос LINQ, если вы не знаете, как выглядит база данных?

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