net - mongodb insert c#
Controlador MongoDB C#- Ignorar campos en el enlace (3)
Al usar un FindOne () usando MongoDB y C #, ¿hay alguna manera de ignorar los campos que no se encuentran en el objeto?
EG, modelo de ejemplo.
public class UserModel
{
public ObjectId id { get; set; }
public string Email { get; set; }
}
Ahora también almacenamos una contraseña en la colección MongoDB, pero no queremos vincularla al objeto anterior. Cuando hacemos un Get así,
var query = Query<UserModel>.EQ(e => e.Email, model.Email);
var entity = usersCollection.FindOne(query);
Obtenemos el siguiente error
Element ''Password'' does not match any field or property of class
¿Hay alguna forma de decirle a Mongo que ignore los campos que no pueden coincidir con los modelos?
Sí. Otra forma (en lugar de editar su clase de modelo) es usar " Registrar mapa de clase " con " SetIgnoreExtraElements "
En su caso, simplemente agregue este código cuando inicialice su controlador:
BsonClassMap.RegisterClassMap<UserModel>(cm =>
{
cm.AutoMap();
cm.SetIgnoreExtraElements(true);
});
Puede leer más acerca del mapeo de clases de Mongo en:
http://mongodb.github.io/mongo-csharp-driver/2.0/reference/bson/mapping/
Sí. Simplemente decore su clase UserModel
con el atributo BsonIgnoreExtraElements
:
[BsonIgnoreExtraElements]
public class UserModel
{
public ObjectId id { get; set; }
public string Email { get; set; }
}
Como su nombre indica, el conductor ignoraría cualquier campo adicional en lugar de lanzar una excepción.
Sin embargo, otra posible solución es registrar una convención para esto.
De esta manera, no tenemos que anotar todas las clases con [BsonIgnoreExtraElements] .
En algún lugar al crear el cliente mongo, configure lo siguiente:
var pack = new ConventionPack();
pack.Add(new IgnoreExtraElementsConvention(true));
ConventionRegistry.Register("My Solution Conventions", pack, t => true);