2014-11-19 7 views
5

ich eine C# Klasse wie folgt erstellt haben:System.FormatException‘aufgetreten in MongoDB.Bson.dll - XXX ist keine gültige 24-stellige Hex-String

public class Employee 
    { 
     [BsonRepresentation(BsonType.ObjectId)] 
     public string Name { get; set; } 
     public int Age { get; set; } 
     public List<string> Address { get; set; } 
    } 

Wenn ich versuche, diese Informationen zu speichern (mit MongoDB) wie folgt aus:

var e = new Employee(); 
    e.Address = new List<string>(); 
    e.Address.Add("Address 1"); 
    e.Address.Add("Address 2"); 

    e.Age = 333; 
    e.Name = "Some Name"; 

    context.Employees.Insert(e); 

ich erhalte folgende Fehlermeldung:

An unhandled exception of type 'System.FormatException' occurred in MongoDB.Bson.dll 

Additional information: 'Some Name' is not a valid 24 digit hex string. 

Wie kann ich ein String-Feld erstellen, das in MongoDB als ObjectID fungiert?

Antwort

3

aus der Dokumentation lesen:

... In this case the serializer will convert the ObjectId to a string when reading data from the database and will convert the string back to an ObjectId when writing data to the database (the string value must be a valid ObjectId) ....

Bitte den weißen Raum aus der Zeichenfolge entfernen. Dann sollte alles funktionieren!

Zum Nachweis, ob Sie eine gültige ObjectId haben, lesen Sie bitte den folgenden SO-Beitrag: MongoDB Node check if objectid is valid

EDIT: die endgültige Antwort ist: You have to change [BsonRepresentation(BsonType.ObjectId)] to [BsonId]

+0

Vielen Dank für die schnelle Antwort. Ich entfernte den Leerraum und änderte den Code in 'e.Name =" SomeName ";', aber ich bekomme immer noch denselben Fehler. – SharpCoder

+1

@SharpCoder Was passiert, wenn Sie '[BsonRepresentation (BsonType.ObjectId)]' in '[BsonId]' 'ändern? – BendEg

+0

Ja. Das hilft !!! Das '' BsonId] '- Attribut anstelle der' [BsonRepresentation (BsonType.ObjectId)] '' '' '' 'userId-Eigenschaft hinzugefügt, behob das Problem. Können Sie bitte Ihre Antwort aktualisieren, dies wird in Zukunft einem anderen Benutzer helfen !! Vielen Dank !! – SharpCoder

1

Ein gültiger ObjectId String-Typ hat ein 12bytes Hexstring wie '546c776b3e23f5f2ebdd3b03'.

Sie setzen [BsonRepresentation(BsonType.ObjectId)] für Ihre Eigenschaft Name. Das bedeutet, dass C# -Treiber eine Zeichenfolge vor jeder Serialisierungsoperation automatisch in ObjectId und umgekehrt umwandeln.

entfernen [BsonRepresentation(BsonType.ObjectId)] und

wenn Sie BsonSerializer.RegisterIdGenerator(typeof(string), new StringObjectIdGenerator()) bei Ihrer Anwendung registrieren starten, und wenn Sie eine Immobilie haben Id für Ihre Entität namens Mongo Zeichenfolge statt ObjectId für ID-Felder setzen, und Sie eine beliebige Zeichenfolge verwenden können, als Schlüssel für Id Felder.