licence - ¿Hay un LINQPad equivalente a una clase DataContext?
linqpad licence (5)
Acabo de comenzar a usar LINQPad y hasta ahora me gusta, pero la mayoría de los tutoriales que he encontrado para LINQ TO SQL utilizan una clase DataContext generada por Visual Studio para actualizaciones persistentes, etc. También soy bastante nuevo en LINQ TO SQL así que mi pregunta es cuál es el equivalente de lo siguiente en LINQPad (si hay uno) ...
MyDbDataContext db = new MyDbDataContext();
...
db.SubmitChanges();
Como se mencionó anteriormente, no es necesario crear un DataContext ya que LINQPad crea uno por defecto.
Pero por si acaso, necesita un segundo DataContext (para la misma base de datos) que podría usar
var secondDataContext = new UserQuery();
Esto creará un segundo contexto de datos al igual que el creado automáticamente.
Puedo acceder con la siguiente muestra cada vez que agrego un método estático fuera de la parte principal:
using(var VT = new LINQPad.User.TypedDataContext())
return (from g in VT.GM_MEMBERS where g.Username == username select new { g.Password }).FirstOrDefault()?.Password;
Respuesta corta: no necesita crear el DataContext usted mismo. LINQPad viene con muchas muestras, LINQPad un vistazo.
Cuando conectas LINQPad a una base de datos, crea el DataContext por ti. Las tablas de DataContext ( Table<T>
) y SubmitChanges()
están disponibles como miembros locales.
Por ejemplo, el modo predeterminado de "Expresión C #" de LINQPad puede escribir:
from p in Person
where p.Name == "Joe"
select p.Address
En el modo "Declaración de C #" de LINQPad:
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
El método de extensión Dump()
LINQPad es muy útil, se puede invocar en cualquier objeto o colección (en el modo de declaración de LINQPad) para mostrar los resultados a continuación.
Tenga en cuenta que ni siquiera necesita conectarse a una base de datos para usar LINQPad. Puedes trabajar con colecciones en memoria:
int[] numbers = new[] { 1, 2, 3, 4, 5 };
numbers.Where(n => n > 3).Select(n => n * 2).Dump();
De hecho, ni siquiera necesita usar LINQ para usar LINQPad. También funciona muy bien como un compilador de fragmentos.
Sé que esto ya tiene una respuesta y estoy de acuerdo con Lucas, pero quería agregar un par de cosas que podrían ayudar a los lectores de esta pregunta.
Puede cargar su propio DataContext desde el ensamblaje si lo desea. Independientemente de si carga su propio Contexto o deja que LinqPad compile uno para usted, se está ejecutando en el Contexto de una clase "UserQuery" generada por LinqPad.
La siguiente declaración de C # muestra esto:
this.GetType().Name.Dump(); // Shows UserQuery
Esta clase de UserQuery deriva de un DataContext. En este ejemplo, dejo que Linqpad construya un espacio de datos para la base de datos AdventureWorks:
this.GetType().BaseType.Dump(); // Shows TypedDataContext
Si cargo mi propio DataContext llamado MyDataContext:
this.GetType().BaseType.Dump(); // Shows MyDataContext
Sobre la base de la respuesta de jaraics, encontré que el constructor UserQuery requiere una cadena de conexión. Al menos lo hace para la versión 4.37.11 de LINQPad. Por lo tanto, recuperé la cadena de conexión de la instancia de UserQuery creada por LINQPad y la usé para crear mi propia instancia.
var connectionString = this.Connection.ConnectionString;
var secondDataContext = new UserQuery(connectionString);
Cuando utilicé el código anterior, me dio un segundo DataContext.