2011-09-23 15 views
5

Estamos utilizando mongodb con C#. Estamos tratando de encontrar una manera de mantener nuestra colección constante a la perfección. En este momento, si un desarrollador realiza algún cambio en la estructura de la clase (agrega un campo o cambia el tipo de datos o cambia la propiedad dentro de una clase anidada), él/ella tiene que cambiar la colección mongo manualmente.Gestión de cambios en la estructura de clases para ser coherente con la colección de mongodb

Es un dolor ya que nuestro proyecto está creciendo y los desarrolladores que trabajan en el proyecto siguen en aumento. Me preguntaba si alguien ya había descubierto una forma de manejar este problema.

  • Investigación
    1. encontré una similar question. sin embargo, no pudo encontrar la solución.
    2. Encontré una forma de encontrar todas las propiedades Finding the properties; sin embargo, el tipo de datos y los documentos anidados se convierten en un problema.
+0

No estoy seguro Entiendo: los documentos en una colección de mongo pueden ser diferentes, por lo que no hay nada que le impida introducir nuevos documentos en la colección existente, aunque los nuevos documentos se basan en instancias de clases actualizadas. ¿O es el problema que desea corregir los documentos existentes en el db? Otra cosa: ¿es el problema con la máquina de desarrollo o con el sistema de producción? –

+3

@ChristianHorsdal: tienes razón. no hay nada que nos impida insertar nuevos documentos, sin embargo, cuando recuperamos los documentos, el serializador generará una excepción. existe una solución disponible, si especificamos ignorar elementos adicionales o recoger elementos adicionales en otro documento BSON. Esto se puede hacer en el serializador BSON. Pero estábamos buscando algún tipo de script de precompilación que alertará al desarrollador para hacer los cambios – Paul

Respuesta

1

Si desea migrar gradualmente a medida que se accede a los registros es necesario seguir algunas reglas simples:

1) Si se agrega un campo que mejor que sea anulable o tiene un valor predeterminado especificado .

2) Nunca cambiar el nombre de los campos, nunca cambian los tipos de campo
- En lugar siempre añadir nuevos campos, agregue código de migración, retire los viejos campos sólo cuando todos los documentos se han migrado más.

para prototipos con MongoDB y C# construyo un dynamic wrapper ... que le permite especificar los objetos usando sólo interfaces (no hay clases necesarias), y que le permite añadir dinámicamente nuevas interfaces a un objeto existente. No está listo para su uso en producción, pero para prototipos, ahorra mucho esfuerzo y hace que la migración sea realmente fácil.

+0

Gracias a esta respuesta, descubrí BsonDefaultValueAttribute, que es esencial para la recomendación anterior. – kingdango

Cuestiones relacionadas