2009-01-12 12 views
8

Estoy cambiando nuestra aplicación de "un conjunto de código & una base de datos" a "un conjunto de códigos en varias bases de datos (una base de datos por cliente)".Cambiar XSD ConnectionString en Runtime para una aplicación Multitenant

El código original es VS2005 ASP.NET (VB) & muchos XSD en una DLL separada. El ConnectionString de web.config anularía el almacenado en el DLL en tiempo de ejecución.

Ahora tengo que cambiar el ConnectionString cada vez que declaro un adaptador de datos/conjunto de datos/tabla, porque la llamada podría ir a una base de datos diferente de la última llamada.

¿Alguien tiene alguna pista sobre esto?

Respuesta

6

Después de un poco de investigación, parece que un XSD tiene una propiedad llamada ConnectionModifier.

Para encontrarlo, en su diagrama XSD, haga clic en la parte TableAdapter del diagrama (donde se definen las consultas).

En la ventana de propiedades, cambie ConnectionModifier a Public y haga clic en Guardar. (Esto parece cambiar la propiedad de todos los conjuntos de datos en esa página también.)

De vuelta en el código principal de su sitio ahora puede hacer algo como esto:

'declare the adapter as normal 
Dim AdapterTest As New DataSetTestTableAdapters.TestTableAdapter 

'pass the new connection object into the now visible property 
AdapterTest.Connection = New Data.SqlClient.SqlConnection("Data Source=Myserver;Initial Catalog=TEST;Integrated Security=True;") 

Sólo se necesita un objeto de conexión .

¡Tengo que dar esta prueba! Desafortunadamente, un nuevo objeto de conexión tendrá que pasarse cada vez que declare algo desde un XSD.

1

También se ha encontrado que, aunque la propiedad mencionada (ConnectionModifier) ​​es Public, aún no se puede ver mediante código cuando se trata de un QueriesTableAdapter. Por lo tanto, tuve que pasar bastante tiempo eliminándolos y reemplazándolos con un bloque normal de "Uso de consultas".

Además, estoy seguro de que el proyecto parece más rápido ahora. Podría ser la reducción de tamaño o el uso de "Usar" con todas las llamadas ahora (el código original era temprano en nuestros días .NET, por lo que podría haberse escrito mejor en primer lugar).

Cuestiones relacionadas