Trình điều khiển MongoDB .NET cung cấp một số khả năng trong các trường hợp như vậy:
Tính đa hình
Bạn có thể xây dựng một hệ thống phân cấp các lớp và trình điều khiển MongoDB sẽ có thể xác định loại đối tượng mà nó được truy xuất từ cơ sở dữ liệu:
[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; }
}
Trình điều khiển MongoDB sẽ tạo trường bổ sung _t
trong mọi tài liệu sẽ đại diện cho lớp tương ứng.
Lớp đơn
Bạn vẫn có thể có Post
lớp và sử dụng BsonIgnoreIfNull
thuộc tính để tránh ngoại lệ tuần tự hóa. Trình điều khiển MongoDB .NET sẽ đặt các thuộc tính đó thành null
nếu chúng không tồn tại trong cơ sở dữ liệu của bạn.
public class Post
{
[BsonId]
public string Id { get; set; }
[BsonIgnoreIfNull]
public string Message { get; set; }
[BsonIgnoreIfNull]
public string Image { get; set; }
}
BsonDocument
Bạn cũng có thể loại bỏ cách tiếp cận được đánh máy mạnh và sử dụng BsonDocument
lớp là cấu trúc giống như từ điển động đại diện cho các tài liệu Mongo của bạn
var collection = db.GetCollection<BsonDocument>("posts");
Thông tin chi tiết khác tại đây
động
Chỉ định dynamic
dưới dạng tham số chung của ICollection
bạn sẽ nhận được danh sách ExpandoObject
điều đó sẽ giữ tất cả các giá trị bạn có trong cơ sở dữ liệu của mình.
var collection = db.GetCollection<dynamic>("posts");
var data = collection.Find(Builders<dynamic>.Filter.Empty).ToList();
var firstMessage = data[0].Message; // dynamically typed code