MongoDB C# Pilote - Ignorer les champs sur la liaison
en utilisant FindOne () en utilisant MongoDB et C#, y a-t-il un moyen d'ignorer les champs qui ne se trouvent pas dans l'objet?
par exemple, de modèle par exemple.
public class UserModel
{
public ObjectId id { get; set; }
public string Email { get; set; }
}
maintenant nous stockons aussi un mot de passe dans la collection MongoDB, mais nous ne voulons pas le lier à l'objet ci-dessus. Quand nous faisons un Obtenir comme,
var query = Query<UserModel>.EQ(e => e.Email, model.Email);
var entity = usersCollection.FindOne(query);
nous obtenons l'erreur suivante
Element 'Password' does not match any field or property of class
y a-t-il quoi qu'il en soit pour dire à Mongo d'ignorer les champs qui ne correspondent pas aux modèles?
3 réponses
Oui. Simplement décorer votre UserModel
la classe BsonIgnoreExtraElements
l'attribut:
[BsonIgnoreExtraElements]
public class UserModel
{
public ObjectId id { get; set; }
public string Email { get; set; }
}
Comme son nom l'indique, le conducteur devra ignorer les champs supplémentaires au lieu de lancer une exception.
encore une autre solution possible, est d'enregistrer une convention pour cela.
de Cette façon, nous n'avons pas à annoter toutes les classes [BsonIgnoreExtraElements].
quelque part lors de la création de la mongo client, le programme d'installation suivantes:
var pack = new ConventionPack();
pack.Add(new IgnoreExtraElementsConvention(true));
ConventionRegistry.Register("My Solution Conventions", pack, t => true);
Oui. Une autre façon (au lieu de modifier le modèle de classe) est d'utiliser " Inscrire Le Plan De Classe" par " SetIgnoreExtraElements"
dans votre cas, ajoutez simplement ce code lorsque vous initialisez votre pilote:
BsonClassMap.RegisterClassMap<UserModel>(cm =>
{
cm.AutoMap();
cm.SetIgnoreExtraElements(true);
});
Vous pouvez en savoir plus sur la cartographie de la classe Mongo dans:
http://mongodb.github.io/mongo-csharp-driver/2.0/reference/bson/mapping/