2016-06-24 17 views
0

ich eine richtig gefiltert SQL-Abfrage mit fließend API Erzeugung in Entity Framework Kern RC2-final eine harte Zeit, mit einer SQLite-Datenbank .Wie sofort Filter auf mehr GUID Linq eine entsprechenden SQL-Generierung, wo Klausel

Ich habe die folgende einfache Einheit:

public class Thing 
{ 
    [Required, Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid Id { get; set; } 

    public string Name { get; set; } 
} 

Ich brauche die Datenbank für alle Bücher abzufragen, die ich zur Verfügung stellen in einer Stash Liste der Bücher sind. Bis jetzt klingt das einfach. Dies ist, wie wir es schreiben konnte:

// 'GetShortListFromSomewhere' returns 2 items that ALREADY exist in db 
List<Thing> externalList = GetShortListFromSomewhere(); 
var result = db.Things.Where(thing => externalList.Contains(o.Id)).ToList(); 

aber die folgende Abfrage erzeugt wird, welche Art von richtig und Art .. nicht .. für SQLite:

SELECT "o"."Id", "o"."Name" FROM "Thing" AS "o" 
    WHERE "o"."Id" IN ('7edbc016-abfa-4005-83d1-b39618b047df', '2def16bb-4203-417d-847c-7bdf053a00e8') 

Wie in Code erwartet, diese gibt mir 0 Einträge zurück, obwohl Ids perfekt sind. Guid auf Sqlite wie auf Blob gespeichert und obwohl EF-Core scheint den Filter gut für Single-Item-Filter zu behandeln, scheint es in diesem Fall nicht damit umzugehen.

Wie kann ich dieses Problem umgehen, da ich weiß, dass es sich um eine SQL-Operation handelt?

ps: Das letzte, was ich will, ist für EF Core, die ganze Thing Sammlung von db herunterzuladen und dann zu filtern! In meinem Fall wäre es verrückt.

Antwort

0

Dies ist die Ausgabe #5801. Leider wird es nicht für die Version 1.0.0 behoben werden. Um diese Problemumgehung zu umgehen, ordnen Sie die Spalten den Eigenschaften byte[] zu.

+0

Ok, danke für die Rückmeldung. Das Mapping der Spalten auf 'byte []' Eigenschaften wäre eine große Aufgabe in meinem Projekt. Wir haben fast 100 Entitäten mit mindestens 2 Guids pro Entität. Und viele viele Hinweise auf diese Leitlinien. Ohne näher darauf zu schauen, wie es weitergeht, kann es bereits ein schönes Kopfweh voraussehen. "Für jetzt" (tm) könnte ich für eine Abweichung wie 'externalList.Foreach (externalItem => db.Things.Where (o => externalItem.Id == o.Id))' .. Auch Schauer über Ihren Rücken , Recht ? :) – DarkUrse

+0

Das Update ist auch in den [nächtlichen Builds] (http://myget.org/gallery/aspnetvnext) jetzt, wenn das eine Option ist ... – bricelam

+0

Ja, viel besser. Ich weiß, dass wir von der Produktionszeit für Version 1.0.1 weit entfernt sind, aber denkst du, dass eine offizielle Version von nugget bis September erhältlich sein wird? In der Zwischenzeit werde ich diese Antwort akzeptieren, da es zu diesem Zeitpunkt die beste Option ist. – DarkUrse