2017-05-21 2 views
0

Ich beginne gerade mit DocumentDB/Cosmos und bin in einen Fehler geraten und ich bin nicht sicher, ob es mein Tun oder ein Fehler ist. Zur Vereinfachung des Tests verwende ich den DocumentDB-Emulator V1.13.58.2 und das C# DocumentDB SDK V1.14.0.DocumentDB Emulator stürzt auf Linq ab Abfrage

Alles funktioniert gut, bis ich versuche, eine Linq-Abfrage, wo ich einen Gleichheitstest auf eine andere Dokumenteigenschaft als ID. Es funktioniert, wenn ich id verwende, andernfalls stürzt der DocumentDB Server ab. Ich habe auch versucht, auf V1.13.4 des SDK herunterzurüsten und es wirft eine Ausnahme "Unerwartetes Zeichen beim Parsen von Wert: ≻. Pfad '', Zeile 0, Position 0".

Unten ist der Code, den ich verwende, um das Problem zu erstellen.

Zuerst habe ich eine einfache Klasse erstellt, die ich dann einige Instanzen der Datenbank hinzufügen. Ich kann sehen, dass die Dokumente erfolgreich mit den richtigen Partitionen im Dokument-Explorer erstellt wurden.

Dann versuche ich und Abfrage auf der DB mit linq wo "Übereinstimmung" ist ein Linq Ausdruck.

using (var query = m_Client.CreateDocumentQuery<TObject>(UriFactory.CreateDocumentCollectionUri(m_DBName, m_ColName), 
      new FeedOptions() { MaxItemCount = 1 }).Where(m => m.PartitionId == PartitionId && m.DocumentType == m_Type) 
      .Where(match).AsDocumentQuery()) 
     { 
      var response = await query.ExecuteNextAsync<TObject>(); 
      if (response.Count == 0) { return null; } 
      return response.ElementAt(0); 
     } 

Wenn ich Spiel auf

match = m => m.Id == entity1.Id; 

es funktioniert gut.

Allerdings, wenn ich gesetzt Match

match = m => m.NumberProperty == entity1.NumberProperty; 

oder

match = m => m.StringProperty == entity1.StringProperty; 

die DocumentDb Server abstürzt.

Jetzt funktioniert das alles gut auf meiner cloud-gehosteten Cosmos-Datenbank, so dass es kein großes Problem ist, aber ich war nur neugierig, ob es etwas war, was ich tat oder nur ein Fehler. Wenn jemand irgendeine Einsicht hat, würde ich es sehr schätzen. Vielen Dank.

Antwort

0

Ich erstelle eine Konsolenanwendung und eine Verbindung zu Azure Cosmos DB Emulator-Instanz, ich konnte Dokumente abfragen und filtern, die auf der ID-Eigenschaft und anderen Eigenschaften basieren.

Klasse TestEntityClass (gleiche wie Sie):

public class TestEntityClass 
{ 
    [JsonProperty(PropertyName = "id")] 
    public Guid Id { get; set; } 
    [JsonProperty(PropertyName = "type")] 
    public int DocumentType { get; set; } 
    [JsonProperty(PropertyName = "pId")] 
    public string PartitionId { get; set; } 
    [JsonProperty(PropertyName = "stringProperty")] 
    public string StringProperty { get; set; } 
    [JsonProperty(PropertyName = "numberProperty")] 
    public int NumberProperty { get; set; } 
} 

packages.config

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="Microsoft.Azure.DocumentDB" version="1.14.0" targetFramework="net45" /> 
    <package id="Newtonsoft.Json" version="6.0.8" targetFramework="net45" /> 
</packages> 

enter image description here

Hinweis: set EnableCrossPartitionQuery = true wenn eine Abfrage über ausführen Partitionen

Bitte versuchen Sie TestEntityClass in CreateDocumentQuery<TestEntityClass> anstelle von CreateDocumentQuery<TObject> zu verwenden, und prüfen Sie, ob der gleiche Fehler angezeigt wird.

+0

Hum, ich habe es auf einem anderen Computer versucht und es hat auch gut für mich funktioniert. Also habe ich dann versucht, meinen ursprünglichen Code auszuführen und es hat auch auf diesem Computer funktioniert. Etwas muss mit meiner Umgebung auf meinem anderen Computer durcheinander gebracht werden. Danke für deine Zeit und Hilfe. – Pumices