Tôi đã xem xét quá trình hydrat hóa thông qua bài đăng của nhà xây dựng được thực hiện thông qua GetProperties
.
Vì vậy, public readonly Sku Sku;
không hiển thị qua classMap.ClassType.GetTypeInfo().GetProperties(_bindingFlags)
bởi vì nó chỉ có thể được truy cập như là trường thành viên.
Bạn có thể thay đổi nó thành public Sku Sku { get; }
vì vậy nó được hydrat hóa thông qua phương thức khởi tạo thông qua GetProperties
và thay đổi tất cả các trường chỉ đọc (Sku - VendorId, Value
&VendorId - Value
các trường) để có phương thức lấy thuộc tính.
Ngoài ra, bạn phải thêm cm.MapProperty(c => c.Identity)
vì vậy x=>x.Identity.Equals(entity.Identity)
có thể được tuần tự hóa khi được sử dụng dưới dạng biểu thức vì Identity
không thể ngậm nước và đăng ký thông qua ImmutablePocoConvention
vì nó không phải là một đối số của phương thức khởi tạo khi logic bản đồ tự động chạy.
Thay đổi mã:
public class Sku : Identity<Product>
{
public VendorId VendorId { get; }
public string Value { get; }
}
public class VendorId : Identity<Vendor>
{
public string Value { get; }
}
BsonClassMap.RegisterClassMap<Product>(cm =>
{
cm.AutoMap();
cm.MapIdMember(c => c.Sku);
cm.MapProperty(c => c.Identity);
});