2009-06-05 9 views
6

Se me ha asignado la tarea de crear un sitio que permita a nuestros diversos clientes grandes iniciar sesión en nuestro sitio web y hacer clic en nuestras diversas páginas para ver los datos de análisis en función de sus ventas.¿Manejar diferentes bases de datos con LINQ basado en el usuario que está conectado actualmente?

¿Alguien tiene alguna idea sobre la mejor manera de manejar bases de datos múltiples basadas en el usuario? Digamos que tenemos 3 clientes de gran nombre, la decisión de diseño se ha tomado cada uno de los grandes clientes tiene su propia base de datos.

Si un usuario del clienteA inicia sesión en nuestro sistema, debería ver los análisis de su empresa, y el modelo debería estar descendiendo desde el contexto de datos del clienteA. Del mismo modo, si alguien inicia sesión y están asociados con clientB en la base de datos, entonces necesitan que se extraigan sus datos de ese contexto de datos.

Si puedo, me gustaría tener una clase de capa de acceso a datos escrita en LINQ y tener alguna manera de pasar el DataContext asociado con ese usuario cuando inicien sesión. ¿Alguien puede pensar en una forma apropiada o limpia de hacer esto?

+0

¿El esquema será el mismo para todas las bases de datos? – BFree

+0

@BFree, en lo que respecta a las consultas que haré, serán las mismas. Eventualmente pueden diferir en una columna de dos, pero no con respecto a las consultas LINQ que ejecutaré. –

+0

@TankMan, lo que se hace se llama fragmentación de base de datos. – tuinstoel

Respuesta

9

Si los esquemas son los mismos para todas las bases de datos, entonces es muy simple. El contexto de datos tiene una sobrecarga que toma una cadena de conexión. Simplemente almacene las diversas cadenas de conexión en una ubicación centralizada (base de datos, XML, recurso, lo que sea) y luego simplemente cree un contexto de datos con esa cadena de conexión que luego puede usar independientemente de quién esté conectado.

+0

La pregunta que tengo es cómo manejo el cambio del contexto de datos o el uso de uno diferente basado en ese usuario en particular. –

+0

Estoy de acuerdo con BFree. Su punto de pivote va a ser la cadena de conexión. –

+0

@TankMan: Todo está en la cadena de conexión. Si detecta que un usuario diferente se ha conectado, obtenga la cadena de conexión para ellos y simplemente actualice un DataContext con esa cadena de conexión. – BFree

Cuestiones relacionadas