2017-08-17 1 views
-1

Ich habe eine .net-Kern-Anwendung, die ziemlich direkt ist es REST verwendet, um Objekte zu und von Mongo db hinzufügen und herunterladen. Hinzufügen von Elementen funktioniert wirklich gut. Ich erhalte auch eine Liste, die alle Elemente enthält, aber wenn ich versuche, mit id darauf zuzugreifen, bekomme ich jedes Mal, wenn ich null bekomme. Was soll ich ändern, damit dieses Stück Code funktioniert? Es bedeutet, dass ein Tool-Objekt aus der Datenbank mit seiner eindeutigen ID abgerufen wird, wenn eine Übereinstimmung in der Datenbank vorhanden ist.Erhalte ein Dokument von LUUID

Hier ist ein Objekt in der Datenbank database view Hier ist meine Repository-Klasse

private IMongoCollection<Tool> Tools => _database.GetCollection<Tool>("Tools"); 

    public async Task<Tool> GetAsync(Guid id) => 
      await Tools.AsQueryable().FirstOrDefaultAsync(tool => tool.Id == id); 

Argument wie das aussieht, wenn ich es in Debugger überprüfen "{ee1aa9fa-5d17-464c-a8ba-f685203b911f}"

bearbeiten

Werkzeug Klasseneigenschaften

public Guid Id { get; protected set; } 

public string Model { get; protected set; } 

public string Brand { get; protected set; } 

public string Type { get; protected set; } 

public uint Box { get; protected set; } 

Fest Scheck kommentiert

Project on github

+0

Was ist die Frage ? – Liam

+0

Ich habe es selbst erklärt, aber hinzugefügt – karoluS

+0

Nein, immer noch keine Ahnung, was Sie fragen? – Liam

Antwort

1

Der einfachste Weg, dies in C# MongoDB-Treiber zu tun, ist eine globale GuidRepresentation Einstellung zu setzen, die zu finden sind auf dem BsonDefaults Objekt. Dies ist eine globale Einstellung und wirkt sich auf die Serialisierung/Deserialisierung von GUIDs in Bson Binary Objects aus.

BsonDefaults.GuidRepresentation = GuidRepresentation.PythonLegacy; 

var collection = new MongoClient().GetDatabase("test").GetCollection<ClassA>("test"); 

var item = collection.Find(x => x.MyId == new Guid("ee1aa9fa-5d17-464c-a8ba-f685203b911f")) 
.FirstOrDefault(); 

Die zweite Option ist die GUID manuell aus einer LUUID zu einer CSUUID zu konvertieren, für diese gibt es eine Hilfsklasse innerhalb des MongoDB Fahrer GuidConverter, damit sie die GUID um byte[] umwandelt, die normalerweise verwendet wird, für die Speicherung, aber wir können es für unsere Abfrage verwenden.

BsonDefaults.GuidRepresentation = GuidRepresentation.CSharpLegacy; 

var collection = new MongoClient().GetDatabase("test").GetCollection<ClassA>("test"); 

var luuid = new Guid("0798f048-d8bb-7048-bb92-7518ea4272cb"); 
var bytes = GuidConverter.ToBytes(luuid, GuidRepresentation.PythonLegacy); 
var csuuid = new Guid(bytes); 

var item = collection.Find(x => x.MyId == csuuid) 
    .FirstOrDefault(); 

Ich habe auch bemerkt, dass Sie Robo T3 verwenden (auch bekannt als RoboMongo), innerhalb dieser Anwendung können Sie festlegen, wie GUIDs, indem Sie auf Options angezeigt werden ->Legacy UUID Encodings

RoboMongo

+0

Ich wünschte, ich könnte Sie aufrüsten. Ich habe beide Lösungen ausprobiert und beide arbeiten. Vielen vielen Dank für die tolle Antwort! – karoluS

Verwandte Themen