MongoDB .NET-stuurprogramma biedt in dergelijke gevallen weinig mogelijkheden:
Polymorfisme
U kunt een hiërarchie van klassen bouwen en de MongoDB-driver kan een type object bepalen dat uit de database wordt opgehaald:
[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-stuurprogramma maakt een extra veld _t
in elk document dat de overeenkomstige klasse zal vertegenwoordigen.
Eenpersoonsles
Je kunt nog steeds Post
. hebben class en gebruik BsonIgnoreIfNull
attribuut om serialisatie-uitzondering te voorkomen. MongoDB .NET-stuurprogramma stelt deze eigenschappen in op null
als ze niet in uw database voorkomen.
public class Post
{
[BsonId]
public string Id { get; set; }
[BsonIgnoreIfNull]
public string Message { get; set; }
[BsonIgnoreIfNull]
public string Image { get; set; }
}
BsonDocument
U kunt ook een sterk getypeerde benadering laten vallen en BsonDocument
. gebruiken class, een dynamische woordenboekachtige structuur die uw Mongo-documenten vertegenwoordigt
var collection = db.GetCollection<BsonDocument>("posts");
Meer details hier
dynamisch
Specificeren van dynamic
als generieke parameter van ICollection
je zou een lijst moeten krijgen met ExpandoObject
die alle waarden bevat die je in je database hebt.
var collection = db.GetCollection<dynamic>("posts");
var data = collection.Find(Builders<dynamic>.Filter.Empty).ToList();
var firstMessage = data[0].Message; // dynamically typed code