example sql linq linq-to-sql datacontext

example - LINQ to SQL multiple DataContext-s



datacontext c# (4)

Estoy tratando de encontrar la mejor estrategia sobre cómo organizar DataContexts. La base de datos típica con la que trabajamos tiene entre 50 y 100 tablas, generalmente en tercera forma normal y con muchas relaciones entre ellas. Creo que tenemos dos opciones:

  1. Pon todas las tablas en un solo contexto. Esto asegurará que todo lo que hagamos se cometerá en el orden correcto en la base de datos. El problema es que el diseñador de LINQ será un desastre con más de 50 tablas y me preocupa que el rendimiento se vea afectado.
  2. Cree varios contextos de datos basados ​​en la agrupación lógica de tablas. El problema es que habrá lugares donde un lado de una relación estará en un contexto y el otro en otro. Tendremos que encargarnos manualmente de comprometer ambos contextos en el orden correcto.

¿Hay alguna práctica recomendada para manejar esto?

Más detalles:

Quiero crear mis propias entidades y unidad de trabajo además de LINQ to SQL. Las entidades se definirán en un archivo de modelo xml donde también se especificará la asignación a entidades LINQ. Una herramienta personalizada generará mis entidades (POCO) según el modelo. El código del cliente solo interactuará con mis entidades y mi unidad de trabajo; nunca directamente con las entidades DataContext o LINQ. Sin embargo, no quiero duplicar lo que proporciona LINQ to SQL de forma predeterminada, así que quiero usar el LINQ DataContext subyacente. Esto significa que no puedo tener dos pedidos en diferentes contextos de datos, porque no sería posible mapear mi Orden POCO con ambos.


Debe crear contextos que le permitan realizar unidades de trabajo . Esto puede implicar superposición de asignaciones de tablas.

Contexto1: el cliente tiene muchas facturas

Contexto2: el cliente tiene muchas órdenes

Contexto3: la factura tiene muchas órdenes


Las correlaciones LINQ-to-SQL son como DataSets tipeados, ya que cuando se usa uno, se trata de una sesión que contiene datos. Puede tener las mismas tablas en varios DataContexts diferentes. Son solo clases, después de todo; no significan nada hasta que comienzas a interactuar con la base de datos, llenándolas con datos existentes o usándolos para crear nuevos datos.

Por lo tanto, quizás tenga mesas de Cliente, Dirección, Teléfono, etc. con las que trate cuando envíe un nuevo catálogo. Luego tiene tablas de Factura, Artículo de línea, Producto, etc. que usa cuando crea un pedido. Pero en este último conjunto, es posible que desee tener Cliente también. Esta bien. Solo debe tener cuidado de tener solo una sesión activa a la vez para que no use datos inconsistentes. No debería tener problemas al superponer entidades en sus diversos DataContexts, siempre que no los esté utilizando de manera superpuesta.

En cuanto al desorden, puedes poner tu DataContext en un espacio de nombre específico, y también puedes poner tus diversas entidades en un espacio de nombre específico (aunque solo haya un espacio de nombres por conjunto de entidades en un DataContext). Puedes hacer esto en la ventana de Propiedades. Esto te permitirá mantener el Intellisense menos desordenado.


Utilizo un datacontext por base de datos.

Las tablas promedio pueden ser de hasta 100, sin embargo, por experiencia, no experimento ningún problema de rendimiento.

El contexto de datos está en un proyecto separado, que se compila. La dll resultante referenciada del BLL