string - single - multi tenancy que es
Cambiar XSD ConnectionString en Runtime para una aplicación de Multitenant (2)
Estoy cambiando nuestra aplicación de "un conjunto de códigos y una base de datos" a "un conjunto de códigos a varias bases de datos (una base de datos por cliente)".
El código original es VS2005 ASP.NET (VB) y muchos XSD en una DLL separada. El ConnectionString de web.config anularía el almacenado en el DLL en tiempo de ejecución.
Ahora necesito 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?
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;")
Solo toma un objeto de conexión.
¡Todavía tengo que darle una prueba adecuada! Desafortunadamente, un nuevo objeto de conexión tendrá que pasarse cada vez que declare algo desde un XSD.
También se ha encontrado que, aunque la propiedad mencionada (ConnectionModifier) es Public, aún no se puede ver a través de un código cuando se trata de un QueriesTableAdapter. Por lo tanto, tuve que pasar un buen rato 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).