Wersja skrócona:tak, wszędzie używaj String.
Jeśli nie masz nic przeciwko adnotacjom, użyj :
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
W przeciwnym razie możesz użyć mapy klasowej :
BsonClassMap.RegisterClassMap<i_YourModel>(cm =>
{
cm.AutoMap();
cm.SetIdMember(cm.GetMemberMap(x => x.Id)
.SetIdGenerator(StringObjectIdGenerator.Instance));
}
);
Wersja długa :
Wskazane jest użycie czegoś nieprzejrzystego, co nie jest bezpośrednio związane z podstawową implementacją bazy danych, w twoim modelu i warstwie usług tak bardzo, jak to możliwe (jeśli to możliwe).
Wcześniej identyfikatory kluczy podstawowych były zwykle dużymi liczbami, które były następnie mapowane do kolumny klucza podstawowego liczby w bazie danych. Jednak podczas przypisywania nowego identyfikatora do nowej jednostki, należało sprawdzić bazę danych, aby upewnić się, że ma unikalny identyfikator. Istnieje wiele technik, od generatorów identyfikatorów LO-HI, przez kolumny auto_increment, sekwencje itp.
Dzięki NoSQL i potrzebie większej równoległości większość aplikacji używa teraz identyfikatorów UUID lub ich odmian, ponieważ identyfikator może zostać wygenerowany z rozsądnym prawdopodobieństwem, że będzie unikalny bez konieczności pytania bazy danych, czy jest naprawdę unikalny, lub używania sekwencji lub tym podobne, które są wąskimi gardłami w aplikacji, które skalują się w poziomie.
MongoDB nie ma różnicy i używa ObjectId, które są rodzajem identyfikatorów UUID.
Te identyfikatory (zarówno mongo, jak i inne) zawsze mogą być reprezentowane jako ciągi, zwykle reprezentacja HEX bajtów tworzących klucz. Tak więc w swoim modelu użyj String jako identyfikatorów, w warstwie usług tak samo, w warstwie danych przekonwertuj go na format, który jest lepszy dla podstawowej implementacji bazy danych, w tym przypadku MongoDB.