Câu chuyện ngắn:đó là tất cả về các quy ước. Trình điều khiển MongoDB .NET hiển thị lớp tĩnh ConventionRegistry
cho phép bạn đăng ký quy ước của riêng mình (thêm tại đây
). Ngoài ra, có hai quy ước "tích hợp sẵn" __defaults__
và __attributes__
. Tìm hiểu sâu hơn (trình điều khiển github
) bạn có thể thấy rằng nó đăng ký một quy ước khá thú vị:
new NamedIdMemberConvention(new [] { "Id", "id", "_id" })
Có nghĩa là id
các thành viên sẽ được coi là phần tử BSON _id thông thường.
Làm thế nào để khắc phục điều đó?
Bạn có thể loại bỏ các quy ước mặc định
ConventionRegistry.Remove("__defaults__");
Tuy nhiên, tự động bạn sẽ bỏ tất cả các quy ước về trình điều khiển khác, điều này khá rủi ro. Ngoài ra, bạn có thể tạo một thuộc tính giả sẽ luôn trống:
public class SubServiceDef
{
[BsonElement("id")]
public int Id { get; set; }
[BsonId]
public ObjectId FakeId { get; set; }
}
hoặc bạn chỉ có thể sử dụng BsonNoId
thuộc tính nào
[BsonNoId]
public class SubServiceDef
{
[BsonElement("id")]
public int Id { get; set; }
}
Vì vậy, quy ước sẽ đặt id
của bạn là IdMember trong bản đồ lớp nhưng sau đó trong quá trình hậu xử lý, thuộc tính này sẽ buộc IdMember là null và lớp của bạn sẽ được deserialized thành công