c# - LINQPad, utilizando mĂșltiples datacontexts
linq-to-sql (4)
No creo que puedas hacer esto. Vea esta solicitud de LinqPad.
Sin embargo, podría compilar múltiples archivos dbml en un archivo DLL separado y hacer referencia a ellos en LinqPad.
A menudo comparo datos en tablas en diferentes bases de datos. Estas bases de datos NO tienen el mismo esquema. En TSQL, puedo hacer referencia a ellos con la estructura de tabla DB> user> (DB1.dbo.Stores, DB2.dbo.OtherPlaces) para extraer los datos con fines de comparación. Me gusta bastante la idea de LINQPad, pero parece que no puedo extraer fácilmente los datos de dos contextos de datos diferentes dentro del mismo conjunto de declaraciones.
He visto personas que sugieren simplemente cambiar la cadena de conexión para extraer los datos de la otra fuente en el esquema actual, pero, como mencioné, esto no funcionará. ¿Me salté una página en las Preguntas frecuentes? Este parece ser un procedimiento bastante rutinario para no estar disponible para mí.
En el mundo "fácil", me encantaría poder simplemente hacer referencia al contexto de datos mecanografiados que crea LINQPad. Entonces podría simplemente:
DB1DataContext db1 = new DB1DataContext ();
DB2DataContext db2 = new DB2DataContext ();
Y trabaja desde allí.
Puede instanciar tantos contextos como quiera para disparar instancias de SQL y ejecutar pseudo cruces de bases de datos, copiar datos, etc. Nota: las uniones entre contextos se realizan localmente, por lo que debe llamar a ToList (), ToArray (), etc. para ejecutar las consultas utilizando sus respectivas fuentes de datos individualmente antes de unirse. En otras palabras, si "interno" se une a 10 filas de DB1.TABLE1 con 20 filas de DB2.TABLE2, ambos conjuntos (las 30 filas) deben ser arrastrados a la memoria en su máquina local antes de que Linq realice la unión y devuelva la relación / intersección establecer (20 filas máximo por ejemplo).
//EF6 context not selected in Linqpad Connection dropdown
var remoteContext = new YourContext();
remoteContext.Database.Connection.ConnectionString = "Server=[SERVER];Database="
+ "[DATABASE];Trusted_Connection=false;User ID=[SQLAUTHUSERID];Password="
+ "[SQLAUTHPASSWORD];Encrypt=True;";
remoteContext.Database.Connection.Open();
var DB1 = new Repository(remoteContext);
//EF6 connection to remote database
var remote = DB1.GetAll<Table1>()
.Where(x=>x.Id==123)
//note...depending on the default Linqpad connection you may get
//"EntityWrapperWithoutRelationships" results for
//results that include a complex type. you can use a Select() projection
//to specify only simple type columns
.Select(x=>new { x.Col1, x.Col1, etc... })
.Take(1)
.ToList().Dump(); // you must execute query by calling ToList(), ToArray(),
// etc before joining
//Linq-to-SQL default connection selected in Linqpad Connection dropdown
Table2.Where(x=>x.Id = 123)
.ToList() // you must execute query by calling ToList(), ToArray(),
// etc before joining
.Join(remote, a=> a.d, b=> (short?)b.Id, (a,b)=>new{b.Col1, b.Col2, a.Col1})
.Dump();
localContext.Database.Connection.Close();
localContext = null;
Tenga en cuenta que siempre puede crear otro contexto por su cuenta.
public FooEntities GetFooContext()
{
var entityBuilder = new EntityConnectionStringBuilder
{
Provider = "Devart.Data.Oracle",
ProviderConnectionString = "User Id=foo;Password=foo;Data Source=Foo.World;Connect Mode=Default;Direct=false",
Metadata = @"D:/FooModel.csdl|D:/FooModel.ssdl|D:/FooModel.msl"
};
return new FooEntities(entityBuilder.ToString());
}
Actualización : ahora es posible realizar consultas de SQL Server entre bases de datos en LINQPad (desde LINQPad v4.31, con una licencia LINQPad Premium). Para usar esta función, mantenga presionada la tecla Control mientras arrastra las bases de datos desde el Explorador de esquemas hasta la ventana de consulta.
También es posible consultar servidores vinculados (que ha vinculado llamando a sp_add_linkedserver ). Para hacer esto:
- Agregue una nueva conexión LINQ a SQL.
- Elija Especificar base de datos nueva o existente y elija la base de datos primaria que desea consultar.
- Haga clic en la casilla de verificación Incluir bases de datos adicionales y seleccione los servidores vinculados de la lista.