MongoDB .NET-driver tilbyder få muligheder i sådanne tilfælde:
Polymorfi
Du kan bygge et hierarki af klasser, og MongoDB-driveren vil være i stand til at bestemme en type af et objekt, det hentes fra databasen:
[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; }
}
MongoDB-driveren vil oprette yderligere felt _t i hvert dokument, som vil repræsentere tilsvarende klasse.
Enkelt klasse
Du kan stadig have Post klasse og brug BsonIgnoreIfNull attribut for at undgå undtagelse for serialisering. MongoDB .NET driver vil sætte disse egenskaber til null hvis de ikke findes i din database.
public class Post
{
[BsonId]
public string Id { get; set; }
[BsonIgnoreIfNull]
public string Message { get; set; }
[BsonIgnoreIfNull]
public string Image { get; set; }
}
BsonDocument
Du kan også droppe en stærkt indtastet tilgang og bruge BsonDocument klasse, som er en dynamisk ordbogslignende struktur, der repræsenterer dine Mongo-dokumenter
var collection = db.GetCollection<BsonDocument>("posts");
Flere detaljer her
dynamisk
Angivelse af dynamic som generisk parameter for ICollection du bør få en liste over ExpandoObject
der vil indeholde alle de værdier, du har i din database.
var collection = db.GetCollection<dynamic>("posts");
var data = collection.Find(Builders<dynamic>.Filter.Empty).ToList();
var firstMessage = data[0].Message; // dynamically typed code