Le pilote MongoDB .NET offre peu de possibilités dans de tels cas :
Polymorphisme
Vous pouvez créer une hiérarchie de classes et le pilote MongoDB pourra déterminer un type d'objet qu'il récupère de la base de données :
[BsonKnownTypes(typeof(Post), typeof(NewTypePost))]
public abstract class PostBase
{
[BsonId]
public string Id { get; set; }
}
public class Post: PostBase
{
public string Message { get; set; }
}
public class NewTypePost: PostBase
{
public string Image { get; set; }
}
Le pilote MongoDB créera un champ supplémentaire _t
dans chaque document qui représentera la classe correspondante.
Classe unique
Vous pouvez toujours avoir Post
classez et utilisez BsonIgnoreIfNull
attribut pour éviter l'exception de sérialisation. Le pilote MongoDB .NET définira ces propriétés sur null
s'ils n'existent pas dans votre base de données.
public class Post
{
[BsonId]
public string Id { get; set; }
[BsonIgnoreIfNull]
public string Message { get; set; }
[BsonIgnoreIfNull]
public string Image { get; set; }
}
BsonDocument
Vous pouvez également abandonner l'approche fortement typée et utiliser BsonDocument
classe qui est une structure dynamique semblable à un dictionnaire qui représente vos documents Mongo
var collection = db.GetCollection<BsonDocument>("posts");
Plus de détails ici
dynamique
Spécifier dynamic
comme paramètre générique de ICollection
vous devriez obtenir une liste de ObjetDéveloppé
qui contiendra toutes les valeurs que vous avez dans votre base de données.
var collection = db.GetCollection<dynamic>("posts");
var data = collection.Find(Builders<dynamic>.Filter.Empty).ToList();
var firstMessage = data[0].Message; // dynamically typed code