Tengo un problema al actualizar a mongo db utilizando el controlador oficial C#.Reposición en Mongo DB y el problema Id
public abstract class AggregateRoot
{
/// <summary>
/// All mongoDb documents must have an id, we specify it here
/// </summary>
protected AggregateRoot()
{
Id = ObjectId.GenerateNewId();
}
[BsonId]
public ObjectId Id { get; set; }
}
Mis entidades ya tienen el id-s, pero tuve que crear el ID específico mongo para que funcione, ya que todos los documentos en una colección debe tener uno. Ahora, luego recibo una nueva entidad en mi sistema, se genera un nuevo Mongo Id y obtengo el mongo no puede cambiar _id de un documento antiguo excepción. ¿Hay algo de trabajo?
Déjame describir el diseño un poco. Todas las entidades que serían almacenadas como documentos heredaban de AggregateRoot que tenía la generación de id en él. Cada subdocumento tenía su identificación generada automáticamente y no tuve ningún problema con esto. La identificación en AggregateRoot se introdujo para corregir el problema al recuperar datos de MongoCollection a List y se introdujo la generación, por lo que los id-s son diferentes. Ahora podemos mover esa generación de id para guardar los métodos porque la nueva entidad para la actualización tenía una nueva generación de id. Pero significa que cada desarrollador del equipo no debe olvidar generar id-s en el repositorio, lo que es riesgoso. Que sería mejor simplemente ignorar el id de mapeo de mongo si es posible y no tener clase AggregateRoot en absoluto
¿Cómo está guardando sus objetos? El atributo BsonId debe obligar a MongoDB a usar ese campo como tu id. –
La idea es que los datos provienen de un sistema externo para el almacenamiento. Tiene su propio id-s que tengo que almacenar. Y esta es una identificación falsa por el bien de la compatibilidad de Mongo. Cada documento hereda de AggregateRoot, por lo que esto se genera al recibir cada objeto. Está claro que podría recibir los mismos datos, pero el id de mongo generado es diferente. Entonces aparece la excepción –