Pregunta

Tenemos una aplicación que permite al usuario añadir columnas personalizadas a nuestras mesas (tal vez no sea la mejor idea, pero eso es lo que es).

Ahora estamos (re) diseñar nuestra capa DATAACCESS (que en realidad no tenemos una antes) y ahora vamos a utilizar consultas parametrizadas en nuestros datamappers al consultar la base de datos SQL (antes concatenados SQL las cuerdas y escapó todas las entradas).

Ahora estamos tratando de determinar la mejor manera de manejar las columnas personalizadas con el fin de ambas consultas, crear y actualizar estos registros. Los atributos personalizados van a ser almacenados en un diccionario en nuestros "objetos de negocio", así que estaba pensando en hacerlo de esta manera:

Consulta de datos

  • Use SELECT * para obtener todas las columnas y pueblan nuestras propiedades y almacenar el resto (datos personalizados) en un diccionario en el objeto de negocio.

Crear / Actualizar

  • Iterar todas las columnas en la tabla (algo así como: SELECT COLUMN_NAME INFORMATION_SCHEMA.COLUMNS DONDE TABLE_NAME = 'TableName'
  • Generar un SQL-string (con variablenames parametrizados) por la comprobación de que existe columnas tanto en el diccionario y la mesa y luego sumando los valores del diccionario como variables a la SQLCommand

O ¿hay alguna approches mejores sin dejar de utilizar consultas parametrizadas?

¿Fue útil?

Solución

Si va a añadir columnas ad-hoc, ORM se vuelve muy complicado. En cierto modo, cayendo de nuevo a DataTable / DataAdapter (de la que yo no soy un fan) puede ser una opción. En lo personal, me gustaría ver por primera vez en otras opciones para el almacenamiento de los datos personalizado:

  • una columna xml
  • un conjunto de pares clave / valor contra cada registro (en una segunda tabla)
  • algún otro formato delimitado en un [n]varchar(max)

¿De verdad tiene que añadir columnas?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top