Pour les applications de grande taille et qui comportent des données structurées, il est recommandé d'utiliser votre modèle personnalisé lors de la création et de la récupération des données au lieu d'utiliser BsonDocument.
La création d'un modèle est une étape importante pour la désérialisation.
Annotations utiles à retenir lors de la création de votre modèle :
- ajouter
id
dans le modèle. Essayez d'utiliser [BsonId]
attribut des bonnes pratiques :
- Créer une propriété avec une annotation comme
[BsonExtraElements]
il sera utilisé pour contenir tout élément supplémentaire trouvé pendant la désérialisation.
- vous pouvez utiliser
[BsonElement]
pour spécifier le nom de l'élément.
-
[BsonIgnoreIfDefault]
- Initialise une nouvelle instance de la classe BsonIgnoreIfDefaultAttribute.
Structure du modèle type où j'ai essayé de couvrir un maximum de cas. J'ai créé une classe de base pour la propriété _id, juste pour une meilleure architecture, mais vous pouvez l'utiliser directement dans l'application MyModel
également.
public abstract class BaseEntity
{
// if you'd like to delegate another property to map onto _id then you can decorate it with the BsonIdAttribute, like this
[BsonId]
public string id { get; set; }
}
public class MyModel: BaseEntity
{
[BsonElement("PopulationAsOn")]
public DateTime? PopulationAsOn { get; set; }
[BsonRepresentation(BsonType.String)]
[BsonElement("CountryId")]
public int CountryId { get; set; }
[Required(AllowEmptyStrings = false)]
[StringLength(5)]
[BsonIgnoreIfDefault]
public virtual string CountryCode { get; set; }
[BsonIgnoreIfDefault]
public IList<States> States { get; set; }
[BsonExtraElements]
public BsonDocument ExtraElements { get; set; }
}
Maintenant pour désérialiser, utilisez directement votre modèle en appelant FindAsync
comme ça :
cursor = await _collection.FindAsync(filter,
new FindOptions<MyModel, MyModel>()
{ BatchSize = 1000, Sort = sort }, ct);