Краткая версия: да, используйте строку везде.
Если вы нормально с аннотациями, а затем использовать:
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
В противном случае вы можете использовать карту класса:
BsonClassMap.RegisterClassMap<i_YourModel>(cm =>
{
cm.AutoMap();
cm.SetIdMember(cm.GetMemberMap(x => x.Id)
.SetIdGenerator(StringObjectIdGenerator.Instance));
}
);
Длинная версия:
Рекомендуется использовать что-то непрозрачный , который напрямую не связан с базовой реализацией базы данных в вашей модели и уровне обслуживания (насколько это возможно).
Ранее первичные ключи, где обычно большие числа, которые затем были сопоставлены с номером первичного столбца ключа в базе данных. Однако при назначении нового идентификатора новому объекту необходимо проверить проверку базы данных, чтобы обеспечить уникальный идентификатор. Существует множество методов, из генераторов LO-HI, для столбцов auto_increment, для последовательностей и т. Д.
С NoSQL и необходимостью большего параллелизма большинство приложений теперь используют UUID или его варианты, поскольку идентификатор может быть генерируемый с разумными вероятностями, он будет уникальным, без необходимости запрашивать базу данных, если он действительно уникален или использует последовательности или тому подобное, которые являются узкими местами в приложении, которое масштабируется горизонтально.
MongoDB не имеет значения и использует ObjectId, которые являются своего рода UUID.
Эти идентификаторы (как mongo, так и другие) всегда могут быть представлены как строки, обычно HEX-представление байтов, составляющих ключ. Таким образом, в вашей модели используйте String как идентификаторы, на вашем уровне обслуживания, то же самое, в вашем слое данных конвертируйте его в любой формат для вашей базовой реализации базы данных, MongoDB в этом случае.
Итак, у моего UserModel будет строка UserId, и у моего UserEntity также будет строка UserId? Или это еще нужно знать MongoDb и использовать ObjectId для объекта – Luke
Пробовал пояснить ответ. –