MongoDB .NET-drivrutinen erbjuder få möjligheter i sådana fall:
Polymorfism
Du kan bygga en hierarki av klasser och MongoDB-drivrutinen kommer att kunna bestämma en typ av objekt som det hämtas från 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-drivrutinen skapar ytterligare fält _t
i varje dokument som kommer att representera motsvarande klass.
Enkel klass
Du kan fortfarande ha Post
klass och använd BsonIgnoreIfNull
attribut för att undvika undantag för serialisering. MongoDB .NET-drivrutinen ställer in dessa egenskaper på null
om de inte finns i din databas.
public class Post
{
[BsonId]
public string Id { get; set; }
[BsonIgnoreIfNull]
public string Message { get; set; }
[BsonIgnoreIfNull]
public string Image { get; set; }
}
BsonDocument
Du kan också släppa ett starkt skrivet tillvägagångssätt och använda BsonDocument
klass som är en dynamisk ordboksliknande struktur som representerar dina Mongo-dokument
var collection = db.GetCollection<BsonDocument>("posts");
Mer information här
dynamisk
Specificerar dynamic
som generisk parameter för ICollection
du bör få en lista över ExpandoObject
som kommer att hålla alla värden du har i din databas.
var collection = db.GetCollection<dynamic>("posts");
var data = collection.Find(Builders<dynamic>.Filter.Empty).ToList();
var firstMessage = data[0].Message; // dynamically typed code