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