sql >> Base de Datos >  >> NoSQL >> MongoDB

Cómo corregir el error {document}.Id no es compatible

Me había enfrentado al mismo problema. Después de depurar el código de MongoDB, vi que se aplica un serializador diferente cuando se usa la interfaz en lugar del tipo específico. En este caso, Serializador de interfaz discriminado se utiliza como serializador para la interfaz, mientras que BsonClassMapSerializer se utiliza para el tipo específico.

Con este serializador para la interfaz, el mapa de clases de la clase implementadora no está vinculado a la interfaz. Por lo tanto, desconoce que Id es el campo de identificación de bson y debe asignarse a la clave '_id'. Por eso se plantea la excepción.

La solución que funcionó para mí es usar ImpliedImplementationInterfaceSerializer :

[BsonSerializer(typeof(ImpliedImplementationInterfaceSerializer<IEntity, Entity>))]
public interface IEntity 
{ 
   // snip...
}

Este atributo registra el serializador y define el uso del mapa de clase bson de la Entidad para IEntity para que la propiedad Id se asigne correctamente. Encontré esta solución gracias a @Robert Baker en su respuesta aquí:Deserializar objeto como interfaz con MongoDB C# Driver