LINQ en múltiples bases de datos

votos
35

Tengo dos tablas que deben unirse a través de LINQ, pero viven en diferentes bases de datos. En este momento estoy devolviendo los resultados de una tabla, luego revisando y recuperando los resultados de la otra, que como puede adivinar no es terriblemente eficiente. ¿Hay alguna forma de incluirlos en una sola declaración LINQ? ¿Hay alguna otra forma de construir esto para evitar el bucle? Solo estoy buscando ideas, en caso de que esté pasando por alto algo.

Tenga en cuenta que no puedo modificar las bases de datos, es decir, no puedo crear una vista en una que haga referencia a la otra. Algo que aún no he probado es crear vistas en una tercera base de datos que haga referencia a ambas tablas. Cualquier idea bienvenida

Publicado el 09/12/2008 a las 15:43
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
39

Usted puede hacer esto, incluso a través de servidores, siempre y cuando se puede acceder a una base de datos de la otra. Es decir, si es posible escribir una declaración de SQL contra ServerA . DatabaseA que tiene acceso a servidor b . DatabaseB . esquema . TableWhatever , entonces puedes hacer lo mismo en LINQ.

Para hacerlo, necesitarás editar el archivo .dbml a mano. Puede hacer esto en VS 2008 fácilmente de esta manera: haga clic con el botón derecho, elija Abrir con ... y seleccione Editor XML .

Mire el elemento Conexión , que debe estar en la parte superior del archivo. Lo que debe hacer es proporcionar un nombre de base de datos explícito (y el nombre del servidor, si es diferente) para las tablas que no están en la base de datos a la que apunta esa cadena de conexión.

La etiqueta de apertura para un elemento de tabla en su .dbml se ve así:

<Table Name="dbo.Customers" Member="Customers">

Lo que debe hacer es, para cualquier tabla que no esté en la base de datos de la cadena de conexión, cambiar ese atributo Name por algo como uno de estos:

<Table Name="SomeOtherDatabase.dbo.Customers" Member="Customers">
<Table Name="SomeOtherServer.SomeOtherDatabase.dbo.Customers" Member="Customers">

Si tiene problemas, asegúrese de que la otra base de datos (o servidor) sea realmente accesible desde su base de datos (o servidor) original. En SQL Server Management Studio, intente escribir una pequeña instrucción SQL ejecutándose en su base de datos original que haga algo como esto:

SELECT SomeColumn
FROM OtherServer.OtherDatabase.dbo.SomeTable

Si eso no funciona, asegúrese de tener un usuario o iniciar sesión con acceso a ambas bases de datos con la misma contraseña. Debería, por supuesto, ser el mismo que el usado en la cadena de conexión de tu .dbml.

Respondida el 09/12/2008 a las 16:24
fuente por usuario

votos
6

Cree un proceso / vista en su base de datos.

Respondida el 09/12/2008 a las 16:04
fuente por usuario

votos
0

Dadas sus condiciones, no creo que pueda hacer esto en una declaración de Linq. Pero puede unir los resultados de sus consultas L2S a una consulta Linq to Objects.

Respondida el 09/12/2008 a las 16:11
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more