puede hacer esto, incluso entre servidores, siempre que pueda acceder a una base de datos desde la otra. Es decir, si es posible escribir una declaración de SQL contra ServerA. Base de datosA que tiene acceso a ServerB. Base de datos B. esquema. TableWhatever, entonces puede hacer lo mismo en LINQ.
Para hacerlo, tendrá que 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 XML Editor.
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 tabla en su .dbml se parece a esto:
<Table Name="dbo.Customers" Member="Customers">
Lo que hay que hacer es, para cualquier tabla no base de datos de la cadena de conexión, cambiar eso Nombre atributo a algo parecido a una de estas:
<Table Name="SomeOtherDatabase.dbo.Customers" Member="Customers">
<Table Name="SomeOtherServer.SomeOtherDatabase.dbo.Customers" Member="Customers">
Si se encuentra con problemas, asegúrese de que la otra base de datos (o servidor) es realmente accesible desde su base de datos original (o servidor). En SQL Server Management Studio, intentar escribir una instrucción SQL pequeña corriendo en contra de su base de datos original que hace algo como esto:
SELECT SomeColumn
FROM OtherServer.OtherDatabase.dbo.SomeTable
Si que no funciona, asegúrese de que tiene un usuario o entrada en el 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.
¿Por qué no puede cambiar la (s) base (s) de datos? – tuinstoel
De terceros. Los DBA quieren evitar la creación de objetos allí, incluso si se trata de una vista simple. – gfrizzle