1) Hvis du har en kolonne ved navn Id, id eller _id
, i dit stærkt indtastede TDocument
klasse (genstandstypen i en samling), derefter en kolonne med navnet "_id"
vil blive genereret i Mongo. Det vil også oprette et indeks for den kolonne. Du får en dublet nøglefejl
undtagelse, hvis du forsøger at indsætte et element med en nøgle, der allerede eksisterer.
public ObjectId Id { get; sæt; } vil bruge typegeneratoren til
ObjectId
og det vil se ud som _id:ObjectId("57ade20771e59f422cc652d9")
.
offentlig vejledning _id { get; sæt; } vil bruge guide-generatoren til at producere smth som
"_id" :BinData(3,"s2Td7qdghkywlfMSWMPzaA==")
.
public int Id { get; sæt; } ,
offentlig streng-id { get; sæt; } ,
offentlig byte[] _id { get; sæt; } vil også være indekskolonner, der bruger standardindstillingerne for hver type, hvis det ikke er angivet.
2) [BsonId]
giver dig fleksibiliteten til at navngive det indeks, som du vil. [BsonId] public Guide SmthElseOtherThanId { get; sæt; } og
[BsonId] public string StringId { get; sæt; } vil være indekser;
offentlig vejledning SmthElseOtherThanId { get; sæt; } og
offentlig streng StringId { get; sæt; } vil ikke. mongodb vil stadig bruge
_id
internt.
Samme logik, public ObjectId SmthElseOtherThanId {get; sæt;}
uden [BsonId]
dekoration vil ikke være en indekskolonne.
3) [Bson-repræsentation]
lader dig jonglere med Mongo-typen kontra den interne .Net-type, hvis der er en konvertering mellem dem .
At have [BsonId] [BsonRepresentation(BsonType.ObjectId)] public ObjectId Id { get; sæt; } er identisk med
public ObjectId Id { get; sæt; } .
At have [BsonId] [BsonRepresentation(BsonType.ObjectId)] public string Id { get; sæt; } er dog anderledes. Mongo vil automatisk generere objekt-id'er af sig selv, men du vil være i stand til at bruge strenge i .net, filterforespørgsler osv., fordi der er en konvertering mellem objekt-id og streng.
At have [BsonId] [BsonRepresentation(BsonType.ObjectId)] public byte[] Id { get; sæt; } eller
[BsonId] [BsonRepresentation(BsonType.ObjectId)] public int Id { get; sæt; } mislykkes med et
ObjectId er ikke en gyldig repræsentation for en ByteArraySerializer / Int32Serializer
besked.
Men [BsonId] [BsonRepresentation(BsonType.String)] public int StringId { get; sæt; } vil være fint.