Существует ли LINQPad, эквивалентный классу DataContext? - PullRequest
22 голосов
/ 12 мая 2009

Я только начал использовать LINQPad, и до сих пор он мне нравится, но в большинстве учебных пособий, с которыми я сталкивался по LINQ TO SQL, используется класс DataContext, который генерируется Visual Studio для сохранения обновлений и т. Д. Я также довольно новичок в LINQ TO SQL, поэтому мой вопрос в том, что эквивалентно следующему в LINQPad (если он есть) ...

MyDbDataContext db = new MyDbDataContext();

...

db.SubmitChanges();

Ответы [ 5 ]

31 голосов
/ 12 мая 2009

Краткий ответ: Вам не нужно создавать DataContext самостоятельно. LINQPad поставляется с большим количеством образцов, посмотрите на них.

Когда вы подключаете LINQPad к базе данных, он создает DataContext для вас. Таблицы DataContext (Table<T>) и SubmitChanges() доступны как локальные члены.

Например, в стандартном режиме LINQPad «Выражение C #» вы можете просто написать:

from p in Person
where p.Name == "Joe"
select p.Address

В режиме LINQPad "C # Statement":

var query = from p in Person
            where p.Name == "Joe"
            select p.Address;

query.Dump(); // Dump() shows results below

Person joe = query.First();
joe.Name = "Peter";
SubmitChanges();

joe.Dump(); // shows joe's values under the previous query results

Метод расширения Dump() LINQPad очень полезен, его можно вызывать для любого объекта или коллекции (в режиме оператора LINQPad), чтобы показать результаты ниже.

Обратите внимание, что вам даже не нужно подключаться к базе данных, чтобы использовать LINQPad. Вы можете работать с коллекциями в памяти:

int[] numbers = new[] { 1, 2, 3, 4, 5 };
numbers.Where(n => n > 3).Select(n => n * 2).Dump();

На самом деле вам даже не нужно использовать LINQ для использования LINQPad. Он также прекрасно работает как компилятор сниппета.

16 голосов
/ 24 июля 2009

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

Вы можете загрузить свой собственный DataContext из сборки, если хотите. Независимо от того, загружаете ли вы свой собственный контекст или позволяете LinqPad создать его для вас, вы работаете в контексте класса UserQuery, сгенерированного LinqPad.

Следующая инструкция C # показывает это:

  this.GetType().Name.Dump();  // Shows UserQuery

Этот класс UserQuery является производным от DataContext. В этом примере я позволил Linqpad создать текстовый текст для базы данных AdventureWorks:

  this.GetType().BaseType.Dump();  // Shows TypedDataContext

Если я загружаю свой собственный DataContext с именем MyDataContext:

  this.GetType().BaseType.Dump();  // Shows MyDataContext
15 голосов
/ 04 мая 2011

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

var secondDataContext = new UserQuery();

Это создаст второй текстовый текстовый текст, аналогичный автоматически созданному.

10 голосов
/ 05 марта 2012

Опираясь на ответ от jaraics, я обнаружил, что конструктору UserQuery требуется строка подключения. По крайней мере, для LINQPad версии 4.37.11. Поэтому я получил строку подключения из экземпляра UserQuery, созданного LINQPad, и использовал его для создания своего собственного экземпляра.

var connectionString = this.Connection.ConnectionString;
var secondDataContext = new UserQuery(connectionString);

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

2 голосов
/ 02 марта 2017

Я могу получить доступ к следующему примеру, когда добавляю статический метод вне основной части:

using(var VT = new LINQPad.User.TypedDataContext())
  return (from g in VT.GM_MEMBERS  where g.Username == username select new { g.Password }).FirstOrDefault()?.Password;
...