Phiên bản ngắn:có, sử dụng Chuỗi ở mọi nơi.
Nếu bạn đồng ý với các chú thích, hãy sử dụng:
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
Nếu không, bạn có thể sử dụng bản đồ lớp:
BsonClassMap.RegisterClassMap<i_YourModel>(cm =>
{
cm.AutoMap();
cm.SetIdMember(cm.GetMemberMap(x => x.Id)
.SetIdGenerator(StringObjectIdGenerator.Instance));
}
);
Phiên bản dài:
Bạn nên sử dụng thứ gì đó không rõ ràng, không được kết nối trực tiếp với việc triển khai cơ sở dữ liệu bên dưới, trong mô hình và lớp dịch vụ của bạn càng nhiều càng tốt (khi có thể).
Trước đây, id khóa chính thường là số lớn, sau đó được ánh xạ tới cột khóa chính dạng số trên cơ sở dữ liệu. Tuy nhiên, khi gán một id mới cho một thực thể mới, cần phải kiểm tra cơ sở dữ liệu để đảm bảo có một id duy nhất. Nhiều kỹ thuật tồn tại, từ trình tạo id LO-HI, đến cột auto_increment, đến chuỗi, v.v.
Với NoSQL và nhu cầu song song hơn, hầu hết các ứng dụng hiện đang sử dụng UUID hoặc các biến thể của nó, bởi vì ID có thể được tạo với xác suất hợp lý, nó sẽ là duy nhất mà không cần phải hỏi cơ sở dữ liệu xem nó có thực sự là duy nhất hay không, hoặc sử dụng trình tự hoặc tương tự, đó là những nút thắt cổ chai trong một ứng dụng mở rộng theo chiều ngang.
MongoDB không có gì khác biệt và sử dụng ObjectId là một loại UUID.
Những id này (cả mongo và những id khác) luôn có thể được biểu diễn dưới dạng Chuỗi, thường là biểu diễn HEX của các byte tạo khóa. Vì vậy, trong mô hình của bạn, hãy sử dụng Chuỗi làm id, trong lớp dịch vụ của bạn cũng vậy, trong lớp dữ liệu của bạn, hãy chuyển đổi nó sang bất kỳ định dạng nào tốt hơn cho việc triển khai cơ sở dữ liệu cơ bản của bạn, trong trường hợp này là MongoDB.