Подтвердить что ты не робот

Есть ли LINQPad, эквивалентный классу DataContext?

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

MyDbDataContext db = new MyDbDataContext();

...

db.SubmitChanges();
4b9b3361

Ответ 1

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

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

Например, в режиме LINQPad по умолчанию "С# Expression" вы можете просто написать:

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

В режиме LINQPad "С# 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 values under the previous query results

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

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

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

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

Ответ 2

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

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

В следующем статусе С# это:

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

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

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

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

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

Ответ 3

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

var secondDataContext = new UserQuery();

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

Ответ 4

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

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

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

Ответ 5

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

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